{"componentChunkName":"component---src-templates-post-js","path":"/blog/short-url-service-in-30-minutes","webpackCompilationHash":"97000b66fda8dd565841","result":{"data":{"site":{"siteMetadata":{"keywords":["blog","ubug","tech blog","技术博客","playground"]}},"mdx":{"fields":{"title":"🔗 30 分钟创建一个短链服务 ","tips":[],"categories":["code"],"datetime":"2020-09-18 12:23:35","noFooter":false,"description":"“域名很简练，如果用来做短链服务的话应该挺有意思” 这个想法一直存在，决定要做之后发现还是挺容易实现的，过程很有意思。","plainTextDescription":"“域名很简练，如果用来做短链服务的话应该挺有意思” 这个想法一直存在，决定要做之后发现还是挺容易实现的，过程很有意思。\n","author":"Ubug","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='119'%3e%3cpath%20d='M193%20101v5h16V95h-16v6'%20fill='%23573ede'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":3.3645083932853717,"src":"/static/abac10aa1271ddc100a766e57da44f0c/59ced/banner.png","srcSet":"/static/abac10aa1271ddc100a766e57da44f0c/82675/banner.png 500w,\n/static/abac10aa1271ddc100a766e57da44f0c/fef60/banner.png 1000w,\n/static/abac10aa1271ddc100a766e57da44f0c/59ced/banner.png 1403w","srcWebp":"/static/abac10aa1271ddc100a766e57da44f0c/9e780/banner.webp","srcSetWebp":"/static/abac10aa1271ddc100a766e57da44f0c/7fe04/banner.webp 500w,\n/static/abac10aa1271ddc100a766e57da44f0c/d619e/banner.webp 1000w,\n/static/abac10aa1271ddc100a766e57da44f0c/9e780/banner.webp 1403w","sizes":"(max-width: 1403px) 100vw, 1403px"}}},"bannerCredit":null,"slug":"/blog/short-url-service-in-30-minutes","tags":["短链","Baas"]},"headings":[{"value":"一、目标和需求","depth":2},{"value":"二、开发过程","depth":2},{"value":"1. 实现算法","depth":3},{"value":"2. 存储中创建新的表","depth":3},{"value":"3. 绑定云引擎域名","depth":3},{"value":"4. 用官方示例实现自己的服务","depth":3},{"value":"5. 代码","depth":4},{"value":"5. 最后","depth":2}],"body":"const _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/* @jsx mdx */\n\nconst _frontmatter = {\n  \"slug\": \"short-url-service-in-30-minutes\",\n  \"title\": \"🔗 30 分钟创建一个短链服务 \",\n  \"date\": \"2020-09-18 12:23:35\",\n  \"author\": \"Ubug\",\n  \"description\": \"“域名很简练，如果用来做短链服务的话应该挺有意思” 这个想法一直存在，决定要做之后发现还是挺容易实现的，过程很有意思。\",\n  \"categories\": [\"code\"],\n  \"tags\": [\"短链\", \"Baas\"],\n  \"banner\": \"./banner.png\"\n};\nconst makeShortcode = name => function MDXDefaultShortcode(props) {\n  console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n  return mdx(\"div\", props);\n};\nconst SourceCodeLink = makeShortcode(\"SourceCodeLink\");\nconst CodeWithPreview = makeShortcode(\"CodeWithPreview\");\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  let {\n      components\n    } = _ref,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"ubug.io \\u8FD9\\u4E2A\\u57DF\\u540D\\u662F\\u5728\\u51E0\\u5E74\\u524D\\u7533\\u8BF7\\u7684\\uFF0C\\u4E00\\u76F4\\u7EED\\u8D39\\u7528\\u7740\\uFF0C\\u4E3B\\u8981\\u7684\\u4E00\\u4E2A\\u539F\\u56E0\\u662F\\u5F88\\u7B80\\u6D01\\uFF0C\\u6240\\u4EE5\\u6709\\u65F6\\u5019\\u4F1A\\u60F3\\u7528\\u8FD9\\u4E2A\\u57DF\\u540D\\u505A\\u4E00\\u4E2A\\u77ED\\u94FE\\u63A5\\u670D\\u52A1\\u3002\"), mdx(\"p\", null, \"\\u4ECA\\u5929\\u7EC8\\u4E8E\\u628A\\u8FD9\\u4E2A\\u60F3\\u6CD5\\u4ECE TODO List \\u62FF\\u51FA\\u6765\\u601D\\u8003\\u5E76\\u5B9E\\u73B0\\u51FA\\u6765\\u4E86\\u3002\"), mdx(\"p\", null, \"\\u8FD9\\u662F\\u5730\\u5740\\uFF1A\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://s.ubug.io/\"\n  }, \"\\u77ED\\u94FE\\u670D\\u52A1\")), mdx(\"p\", null, \"\\u5F00\\u53D1\\u7684\\u8FC7\\u7A0B\\u592A\\u987A\\u5229\\uFF0C\\u633A\\u6709\\u610F\\u601D\\uFF0C\\u6240\\u4EE5\\u5728\\u6B64\\u8BB0\\u5F55\\u4E0B\\u6574\\u4E2A\\u5B9E\\u73B0\\uFF0C\\u6D41\\u6C34\\u8D26\\u5F88\\u7F57\\u55E6\\uFF0C\\u6280\\u672F\\u4E5F\\u4E0D\\u590D\\u6742\\uFF0C\\u63A8\\u8350\\u626B\\u4E00\\u773C\\u5373\\u53EF\\u3002\"), mdx(\"h2\", null, \"\\u4E00\\u3001\\u76EE\\u6807\\u548C\\u9700\\u6C42\"), mdx(\"p\", null, \"\\u6B63\\u5E38\\u7684\\u77ED\\u94FE\\u670D\\u52A1\\u4E00\\u822C\\u7528\\u6765\\u505A\\u7F51\\u5740\\u7F29\\u77ED\\uFF0C\\u6BD4\\u957F\\u6BB5\\u7684 URL \\u66F4\\u5BB9\\u6613\\u5206\\u53D1\\uFF0C\\u987A\\u4FBF\\u540C\\u65F6\\u5728\\u91CD\\u5B9A\\u5411\\u7684\\u8FC7\\u7A0B\\u4E2D\\u505A\\u8BBF\\u95EE\\u7EDF\\u8BA1\\u7B49\\u3002\\u672C\\u8D28\\u4E0A\\u53EA\\u9700\\u8981\\u4E00\\u4E2A\\u7C7B\\u4F3C KV \\u7684\\u5B58\\u50A8\\u80FD\\u591F\\u5C06\\u7F51\\u5740\\u7F29\\u77ED\\u5373\\u53EF\\uFF0C\\u6EE1\\u8DB3\\u81EA\\u5DF1\\u7684\\u88C5\\u903C\\u9700\\u6C42\\u3002\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5B58\\u50A8\\u548C\\u67E5\\u8BE2\\uFF1B\\u81F3\\u5C11\\u80FD\\u591F\\u5C06\\u5BF9\\u5E94\\u5173\\u7CFB\\u5B58\\u8FDB\\u53BB\\u3001\\u67E5\\u51FA\\u6765\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63A5\\u53E3\\u548C\\u8BA1\\u7B97\\uFF1A\\u9700\\u8981\\u627F\\u63A5\\u8BF7\\u6C42\\uFF0C\\u5411\\u6570\\u636E\\u5E93\\u91CC\\u9762\\u67E5\\u8BE2\\uFF0C\\u7136\\u540E\\u8FD4\\u56DE 302 \\u76F8\\u5E94\\u3002\")), mdx(\"p\", null, \"\\u8FD9\\u4E2A\\u9700\\u6C42\\u91CD\\u70B9\\u662F\\u5B58\\u5728\\u54EA\\uFF1F\\u514D\\u8D39\\u7684\\u5B58\\u50A8\\u670D\\u52A1\\u4E0D\\u591A\\uFF0CLeanCloud \\u4F5C\\u4E3A BaaS \\u670D\\u52A1\\uFF0C\\u4E00\\u76F4\\u5728\\u7528\\u4ED6\\u5BB6\\u7684\\u5B58\\u50A8\\u670D\\u52A1\\uFF0C\\u5F00\\u53D1\\u7248\\u7684\\u91CF\\u7EA7\\u8DB3\\u591F\\u81EA\\u5DF1\\u4F7F\\u7528\\u3002\\u540C\\u65F6\\u63A5\\u53E3\\u548C\\u8BA1\\u7B97\\u65B9\\u9762\\uFF0C\\u914D\\u5957\\u7684\\u4E91\\u5F15\\u64CE\\u867D\\u7136\\u8D44\\u6E90\\u4E0D\\u591A\\uFF0C\\u4F46\\u662F\\u4E00\\u822C\\u7684\\u8BA1\\u7B97\\u548C\\u67E5\\u8BE2\\u4E5F\\u8DB3\\u591F\\u3002\\u6240\\u4EE5\\u6574\\u4E2A\\u8F6F\\u4EF6\\u521D\\u6B65\\u8BBE\\u60F3\\u653E\\u5230 LeanCloud \\u4E0A\\u9762\\uFF0C\\u8FD9\\u4E0D\\u662F\\u5E7F\\u544A\\uFF0C\\u4E00\\u76F4\\u89C9\\u5F97\\u4ED6\\u5BB6\\u7684\\u8FD9\\u4E9B BaaS \\u670D\\u52A1\\u6BD4\\u4E91\\u670D\\u52A1\\u5546\\u7528\\u8D77\\u6765\\u66F4\\u8212\\u670D\\uFF0C\\u552F\\u4E00\\u62C5\\u5FC3\\u7684\\u662F\\u4E07\\u4E00 SDK \\u7528\\u8D77\\u6765\\u4E4B\\u540E\\uFF0C\\u54EA\\u5929\\u4E0D\\u597D\\u8FC1\\u79FB\\uFF0C\\u7528\\u6765\\u505A\\u7B80\\u5355\\u7684\\u6280\\u672F\\u9A8C\\u8BC1\\u548C\\u81EA\\u7528\\u8DB3\\u591F\\u3002\"), mdx(\"h2\", null, \"\\u4E8C\\u3001\\u5F00\\u53D1\\u8FC7\\u7A0B\"), mdx(\"p\", null, \"\\u6574\\u4E2A\\u67B6\\u6784\\u53EF\\u4EE5\\u7B97\\u4F5C Serverless \\u7684\\u67B6\\u6784\\uFF0C\\u5B58\\u50A8\\u662F\\u7528\\u670D\\u52A1\\u6765\\u5B9E\\u73B0\\u7684\\uFF0C\\u53EA\\u9700\\u8981\\u8C03\\u7528\\u63A5\\u53E3\\u5373\\u53EF\\uFF0C\\u4E0D\\u7528\\u62C5\\u5FC3\\u5B58\\u5728\\u54EA\\u7684\\u95EE\\u9898\\u3002\\u8BA1\\u7B97\\u7528\\u7684\\u662F\\u53EF\\u4EE5\\u591A\\u5B9E\\u4F8B\\u8D1F\\u8F7D\\u5747\\u8861\\uFF0C\\u4E0D\\u4E2D\\u65AD\\u670D\\u52A1\\u7684\\u4E91\\u5F15\\u64CE\\uFF0C\\u867D\\u7136\\u4E0D\\u662F\\u5B8C\\u5168\\u5BB9\\u5668\\u5316\\u548C\\u4E91\\u51FD\\u6570\\u7684\\u6982\\u5FF5\\uFF0C\\u4F46\\u662F\\u786E\\u5B9E\\u4E0D\\u7528\\u5173\\u5FC3\\u670D\\u52A1\\u5668\\u7684\\u95EE\\u9898\\uFF0C\\u53EA\\u9700\\u8981\\u4EE3\\u7801\\u548C\\u90E8\\u7F72\\u5373\\u53EF\\u3002\"), mdx(\"p\", null, \"\\u672C\\u6587\\u53EA\\u5173\\u5FC3\\u5B9E\\u73B0\\uFF0C\\u7EDF\\u8BA1\\u529F\\u80FD\\u3001\\u6027\\u80FD\\u3001\\u5B89\\u5168\\u6027\\u7B49\\u90FD\\u662F\\u9700\\u8981\\u8003\\u8651\\u7684\\u70B9\\uFF0C\\u8FD9\\u91CC\\u90FD\\u6CA1\\u6709\\u6DF1\\u5165\\u7814\\u7A76\\uFF0C\\u7B97\\u662F\\u5B9E\\u73B0\\u6574\\u4E2A\\u529F\\u80FD\\u7684\\u6D41\\u6C34\\u8D26\\u3002\"), mdx(\"h3\", null, \"1. \\u5B9E\\u73B0\\u7B97\\u6CD5\"), mdx(\"p\", null, \"\\u601D\\u8DEF\\u5F88\\u7B80\\u5355\\uFF0C\\u5C31\\u662F\\u5B58\\u50A8\\u4E00\\u4E2A\\u5BF9\\u5E94\\u5173\\u7CFB\\u5373\\u53EF\\uFF0C\\u6700\\u7B80\\u5355\\u7684\\u4E00\\u4E2A\\u81EA\\u589E ID \\u52A0\\u4E0A\\u539F\\u94FE\\u63A5\\u5B57\\u6BB5\\u751A\\u81F3\\u90FD\\u80FD\\u5B9E\\u73B0\\u3002\\u4F46\\u662F\\u81EA\\u589E ID \\u5B89\\u5168\\u6027\\u4E0D\\u591F\\uFF0C\\u4ECD\\u9700\\u8981\\u54C8\\u5E0C\\u51FD\\u6570\\u6765\\u627E\\u51FA\\u4E00\\u4E2A\\u77ED\\u7801\\u7684\\u5BF9\\u5E94\\u5173\\u7CFB\\u3002\"), mdx(\"p\", null, \"\\u7F51\\u4E0A\\u7684\\u7B97\\u6CD5\\u6709\\u5F88\\u591A\\uFF0C\\u8FD9\\u4E2A\\u751A\\u81F3\\u548C\\u5206\\u5E03\\u5F0F\\u6570\\u636E\\u8868\\u7684\\u552F\\u4E00 ID \\u8BBE\\u8BA1\\u5F88\\u76F8\\u4F3C\\uFF08\\u96EA\\u82B1\\u7B97\\u6CD5\\u3001Redis\\u3001\\u5355\\u5B9E\\u4F8B\\u5173\\u7CFB\\u6570\\u636E\\u5E93\\u5219\\u589E\\u7B49\\u65B9\\u6848\\uFF09\\uFF0C\\u6211\\u8FD9\\u91CC\\u4F7F\\u7528\\u81EA\\u589E id \\u8F6C\\u8FDB\\u5236\\u6765\\u5B9E\\u73B0\\u8F83\\u77ED\\u5B57\\u7B26\\u4E32\\uFF0C\\u5F88\\u5927\\u7684\\u7F3A\\u70B9\\u662F\\u4E00\\u65E6\\u88AB\\u4EBA\\u627E\\u51FA\\u6765\\u8FDB\\u5236\\u8F6C\\u6362\\u89C4\\u5F8B\\u5C31\\u80FD\\u63A8\\u65AD\\u5E93\\u91CC\\u7684 id\\uFF0C\\u4E0D\\u8FC7\\u81EA\\u7528\\u4E5F\\u4E0D\\u4F1A\\u592A\\u82DB\\u6C42\\u8FD9\\u4E2A\\u3002\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6570\\u636E\\u5E93\\u63D2\\u5165\\u65B0\\u8BB0\\u5F55\\uFF1A\\uFF08\\u4F8B\\u5982\\uFF1A\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://example.com\"\n  }, \"http://example.com\"), \" \\uFF09\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5F97\\u5230\\u4E00\\u4E2A\\u81EA\\u589E\\u7684\\u5341\\u8FDB\\u5236 ID \\u6570\\u5B57\\uFF1A\\uFF08\\u4F8B\\u5982\\uFF1A55116\\uFF09\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5C06\\u6570\\u5B57\\u6309\\u7167\\u8FDB\\u5236\\u8F6C\\u6362\\u6210\\u72EC\\u7279\\u7684\\u9AD8\\u8FDB\\u5236\\u5B57\\u7B26\\u4E32\\u4F5C\\u4E3A\\u77ED\\u7801\\u5B58\\u5230\\u521A\\u624D\\u7684\\u8BB0\\u5F55\\uFF08\\u4F8B\\u5982\\uFF1A\\u7528 16 \\u8FDB\\u5236\\u8F6C 55116 \\u5230 d74c\\uFF09\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8FD4\\u56DE\\u8FD9\\u4E2A\\u77ED\\u7801 \\uFF08\\u4F8B\\u5982\\uFF1Ad74c\\uFF09\")), mdx(\"p\", null, \"\\u4F60\\u53EF\\u4EE5\\u81EA\\u5DF1\\u9009\\u62E9\\u4E00\\u4E2A\\u8FDB\\u5236\\uFF0C\\u4F8B\\u5982 32\\u8FDB\\u5236\\u300162\\u8FDB\\u5236\\u7B49\\u6765\\u5C3D\\u53EF\\u80FD\\u591A\\u5B57\\u7B26\\u6765\\u4EE3\\u66FF\\u8FD9\\u4E2A\\u81EA\\u589EID\\uFF1B\\n\\u540C\\u65F6\\u8FDB\\u5236\\u8F6C\\u6362\\u4E5F\\u53EF\\u4EE5\\u7528\\u4E71\\u5E8F\\u7684\\u5B57\\u7B26\\u4E32\\u6765\\u5B9E\\u73B0\\u81EA\\u5B9A\\u4E49\\u7684\\u8F6C\\u6362\\u8FC7\\u7A0B\\uFF0C\\u4E0D\\u8BA9\\u4EBA\\u4E00\\u773C\\u770B\\u51FA\\u6765\\u9012\\u589E\\u7684\\u8D8B\\u52BF\\uFF0C\\u4F8B\\u5982\\uFF1A16 \\u8FDB\\u5236\\u7528 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"26dea0b731c94f58\"), \" \\u4EE3\\u66FF \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0123456789abcdef\")), mdx(\"h3\", null, \"2. \\u5B58\\u50A8\\u4E2D\\u521B\\u5EFA\\u65B0\\u7684\\u8868\"), mdx(\"p\", null, mdx(\"figure\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1035px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/8bf3953cc78aea1f3ff3adf69be79c8a/53fe8/data.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"12.741312741312742%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAd0lEQVQI101O2w7FIAzy/z/VxVt1XnZUzmhisgdSSgnUhBDgnIPzHtZalFKw1sLeG3NOBfczv/hqh5sgN+RuEBGkGDWw1qqTGvnZW2tIKSHnrBqfoYc3ct7MlR/4+lPTCSFoYABbxxjovesX9MW3mIEMoJcaOfU/l77oXhAHt+sAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"存储结构\",\n    \"title\": \"存储结构\",\n    \"src\": \"/static/8bf3953cc78aea1f3ff3adf69be79c8a/9ad66/data.png\",\n    \"srcSet\": [\"/static/8bf3953cc78aea1f3ff3adf69be79c8a/ae269/data.png 259w\", \"/static/8bf3953cc78aea1f3ff3adf69be79c8a/a4dff/data.png 518w\", \"/static/8bf3953cc78aea1f3ff3adf69be79c8a/9ad66/data.png 1035w\", \"/static/8bf3953cc78aea1f3ff3adf69be79c8a/53fe8/data.png 1170w\"],\n    \"sizes\": \"(max-width: 1035px) 100vw, 1035px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"\\u5B58\\u50A8\\u7ED3\\u6784\"), \"\\n  \")), mdx(\"p\", null, \"\\u91CD\\u70B9\\u662F\\u5176\\u4E2D\\u7684 index\\u3001key\\u3001value \\u4E09\\u4E2A\\u5B57\\u6BB5\\uFF0C\\u8868\\u793A\\u81EA\\u589E\\u5E8F\\u53F7\\u3001\\u77ED\\u7801\\u548C\\u539F\\u59CB\\u94FE\\u63A5\\u3002\"), mdx(\"h3\", null, \"3. \\u7ED1\\u5B9A\\u4E91\\u5F15\\u64CE\\u57DF\\u540D\"), mdx(\"p\", null, mdx(\"figure\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"474px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/fd362621a3a63ef8b9a042febf9cba41/e9ef7/ip.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"92.27799227799228%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACFElEQVQ4y5VUa2/aQBD0//8/baXyIahRFZVWSVW1qAGCeTn4BX6ez3d+THYPTBpAlXPSGLy+m5u9nT1La42macCjrmvIUqIoCgOlFEGbOM/pA0vTotVqgd/jMeb2HJoIzkfbtr3AG1uswtt6CNwQvusjTVPs93tIWZ7I+owDISms6gpu4eAxGsNOnyArSV/7EXXK3hDqSmOZzfFje4df4U+UteyX5lWFlHJVVaei8CxW3DTt5YGfEV4riCHkKkfRHkIIOr+E/ke9zoznZ1lmzjvPc+MIQ8j2SIgojmMkSWImcWG6X47zAiaQUp7QWeuAwzuLs3jhZr3BdDLFarlCEARwnGd4noc1x2czLFdr+EGILBfIRUEQZgPeqAPzsEorFzn2yQ5hEiKIfURJdFImkhhlliDYbhCHPgr6JqIdcorHx2yyc8KUFkz8vxgt73Br38B2Z7CnT6R4guzhG8TtZxTfh4QvEF8HEDefkD7+gUMZZLTxvwrLkgjLsjS5VwzyEfdJfYQmB6imhqqPoEoaUFybtnzFgaeCxZUptSRoSKqwHo2gBgMo2z54jS3Vtpe44kPTy6pS2OUhojiBt1ggHQ4RffwA5/7eqESPHr7oFNWQZLICV4/7JKbY2nXRkPr2vZcDPwLfJ6s45MP0mOL7bpm3hHTAjrPBbDaF6/kXqfQdrynr7gJtwX3dXarqrIr/hz613gs2/He9UySSVQAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"绑定云引擎域名\",\n    \"title\": \"绑定云引擎域名\",\n    \"src\": \"/static/fd362621a3a63ef8b9a042febf9cba41/e9ef7/ip.png\",\n    \"srcSet\": [\"/static/fd362621a3a63ef8b9a042febf9cba41/ae269/ip.png 259w\", \"/static/fd362621a3a63ef8b9a042febf9cba41/e9ef7/ip.png 474w\"],\n    \"sizes\": \"(max-width: 474px) 100vw, 474px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"\\u7ED1\\u5B9A\\u4E91\\u5F15\\u64CE\\u57DF\\u540D\"), \"\\n  \")), mdx(\"p\", null, \"\\u8FD9\\u4E00\\u6B65\\u7684\\u76EE\\u7684\\u662F\\u7528\\u4F60\\u7684\\u57DF\\u540D\\u6765\\u8BBF\\u95EE\\u5230\\u4E91\\u5F15\\u64CE\\u670D\\u52A1\\u3002\\u524D\\u63D0\\u662F\\u4F60\\u6709\\u8FD9\\u4E2A\\u57DF\\u540D\\uFF0C\\u800C\\u4E14\\u6700\\u597D\\u662F\\u5907\\u6848\\u8FC7\\u7684\\uFF0C\\u5982\\u679C\\u6CA1\\u5907\\u6848\\u53EF\\u80FD\\u9700\\u8981\\u5230\\u56FD\\u9645\\u8282\\u70B9\\u7684\\u670D\\u52A1\\u6765\\u5B9E\\u73B0\\u8FD9\\u4E2A\\u8BBF\\u95EE\\u3002\"), mdx(\"h3\", null, \"4. \\u7528\\u5B98\\u65B9\\u793A\\u4F8B\\u5B9E\\u73B0\\u81EA\\u5DF1\\u7684\\u670D\\u52A1\"), mdx(\"p\", null, \"\\u7136\\u540E\\u81EA\\u5DF1\\u521B\\u5EFA\\u4E00\\u4E2A Git \\u4ED3\\u5E93\\uFF0C\\u968F\\u4FBF\\u5728\\u54EA\\uFF0C\\u628A\\u4E0B\\u9762\\u8FD9\\u4E2A\\u4ED3\\u5E93\\u4EE3\\u7801\\u62F7\\u8D1D\\u5230\\u91CC\\u9762\\uFF1A\"), mdx(SourceCodeLink, {\n    url: \"https://github.com/leancloud/slim-getting-started\",\n    name: \"Slim Getting Started\",\n    desc: \"Slim Getting Started for LeanEngine\",\n    mdxType: \"SourceCodeLink\"\n  }), mdx(\"p\", null, \"\\u5F88\\u7B80\\u5355\\u7684\\u4E00\\u4E2A PHP \\u9879\\u76EE\\uFF08\\u53EF\\u4EE5\\u9009\\u62E9\\u5B98\\u65B9\\u5176\\u4ED6\\u73AF\\u5883\\u793A\\u4F8B\\uFF0C\\u8FD9\\u91CC\\u6211\\u9009\\u62E9\\u7528 PHP\\uFF09\\uFF0C\\u4FEE\\u6539\\u9996\\u9875\\uFF0C\\u6DFB\\u52A0\\u63A5\\u53E3\\uFF1A\"), mdx(\"p\", null, \"\\u521B\\u5EFA\\u9996\\u9875\\uFF1A\"), mdx(CodeWithPreview, {\n    codes: [{\n      name: 'index.html',\n      code: \"<!DOCTYPE html>\\n<html lang=\\\"en\\\">\\n<head>...</head>\\n<body>\\n  <div class=\\\"container\\\">\\n    <div class=\\\"empty\\\">\\n      <div class=\\\"empty-icon\\\"><i class=\\\"icon icon-link\\\"></i></div>\\n      <p class=\\\"empty-title h5\\\">\\u77ED\\u94FE\\u670D\\u52A1</p>\\n      <p class=\\\"empty-subtitle\\\">\\u5C06\\u957F\\u94FE\\u63A5\\u8F6C\\u4E3A\\u77ED\\u94FE\\u7684\\u670D\\u52A1: http://s.ubug.io/u/s3T</p>\\n      <div class=\\\"empty-action\\\">\\n        <div class=\\\"form-group\\\">\\n          <textarea rows=\\\"4\\\" class=\\\"form-input\\\" type=\\\"text\\\" id=\\\"url_inputer\\\"></textarea>\\n          <p class=\\\"form-input-hint\\\">\\u76EE\\u524D\\u4EC5\\u652F\\u6301 http / https \\u534F\\u8BAE\\u7684\\u94FE\\u63A5.</p>\\n        </div>\\n        <button class=\\\"btn btn-primary\\\" id=\\\"submit\\\">\\u751F \\u6210</button>\\n      </div>\\n    </div>\\n    <div class=\\\"timeline\\\" id=\\\"result\\\"></div>\\n  </div>\\n</body>\\n<script>\\n  const inputer = document.querySelector('#url_inputer')\\n  const submitBtn = document.querySelector('#submit')\\n  submitBtn.addEventListener('click', async () => {\\n    if (!/^https?:///.test(inputer.value)) {\\n      inputer.classList.add('is-error')\\n    } else {\\n      inputer.classList.remove('is-error')\\n      submitBtn.classList.add('loading', 'disabled')\\n\\n      const json = await fetch('https://s.ubug.io/su/new', {\\n          body: JSON.stringify({ url: inputer.value }),\\n          headers: { 'content-type': 'application/json' },\\n          method: 'POST',\\n        })\\n        .then(response => response.json())\\n\\n      if (json.status === 1 || json.status === 0) {\\n        inputer.value = ''\\n        submitBtn.classList.remove('loading', 'disabled')\\n        const newRes = document.createElement('div')\\n        newRes.innerHTML = `<div class=\\\"timeline-item\\\">\\n            <div class=\\\"tile-content\\\">\\n                <p class=\\\"tile-subtitle\\\">\\u77ED\\u94FE\\u63A5\\uFF1Ahttp://s.ubug.io/u/${json.key}</p>\\n                <p class=\\\"tile-title\\\">\\u539F\\u94FE\\u63A5\\uFF1A${inputer.value}</p>\\n            </div>\\n          </div>`\\n        document.querySelector('#result').appendChild(newRes)\\n      }\\n    }\\n  })\\n</script>\\n</html>\\n\"\n    }],\n    withTitle: true,\n    column: true,\n    titleBar: \"src/views/new_url.phtml\",\n    mdxType: \"CodeWithPreview\"\n  }), mdx(\"p\", null, \"\\uD83D\\uDC46 \\u7B80\\u5355\\u628A\\u7528\\u6237\\u8F93\\u5165\\u62FF\\u5230\\uFF0C\\u7136\\u540E\\u5411\\u540E\\u53F0\\u8BF7\\u6C42\\u7684\\u52A8\\u4F5C\\u3002\"), mdx(CodeWithPreview, {\n    codes: [{\n      name: 'index.php',\n      code: \"\\n// 10 \\u8FDB\\u5236 \\u8F6C 62 \\u8FDB\\u5236\\nfunction from10to62($id) {\\n    $dict = 'femXnjvkw69DgUipVo5FsGrtyuHIxz0Ah4RScC7bEM2QN1O3PJKTZaLlWYqd8B'; // \\u4E71\\u5E8F\\n    $index = $id + 999927; // \\u907F\\u514D\\u4ECE0\\u5F00\\u59CB\\n    $result = '';\\n    do {\\n        $result = $dict[$index % 62] . $result;\\n        $index = intval($index / 62);\\n    } while ($index != 0);\\n    return $result;\\n}\\n// \\u9996\\u9875\\u6E32\\u67D3\\n$app->get('/', function (Request $request, Response $response) {\\n  return $this->view->render($response, \\\"new_url.phtml\\\");\\n});\\n// \\u77ED\\u94FE\\u8DF3\\u8F6C\\n$app->get('/u/{short_url}', function (Request $request, Response $response) {\\n    $su = $request->getAttribute('short_url');\\n\\n    // \\u6570\\u636E\\u5E93\\u67E5\\u8BE2\\uFF0C302 \\u8DF3\\u8F6C\\u5230\\u771F\\u5B9E\\u94FE\\u63A5\\uFF0C\\u4E0D\\u7136\\u8FD4\\u56DE 404\\n    try {\\n        $query = new Query(\\\"short_url\\\");\\n        $query->equalTo(\\\"key\\\", $su);\\n        $url = $query->find();\\n        $realUrl = $url[0]->get(\\\"value\\\");\\n\\n        return $response->withStatus(302)->withHeader(\\\"Location\\\", $realUrl);\\n    } catch (\\\\Exception $ex) {\\n        error_log(\\\"Query record failed!\\\");\\n        $response->withStatus(404);\\n        $response->getBody()->write(\\\"your request $su not found!\\\");\\n    }\\n    return $response;\\n});\\n// \\u77ED\\u94FE\\u751F\\u6210\\n$app->post(\\\"/su/new\\\", function(Request $request, Response $response) {\\n    $data = $request->getParsedBody();\\n    $url = $data[\\\"url\\\"];\\n\\n    $query = new Query(\\\"short_url\\\");\\n\\n    $query->equalTo(\\\"value\\\", $url);\\n    $url = $query->find();\\n    // \\u6570\\u636E\\u5E93\\u5DF2\\u7ECF\\u5B58\\u4E86\\u7684\\uFF0C\\u76F4\\u63A5\\u8FD4\\u56DE\\uFF0C\\u907F\\u514D\\u76F8\\u540C\\u94FE\\u63A5\\u7684\\u591A\\u4E2A\\u77ED\\u94FE\\uFF0C\\u8FD9\\u4E2A\\u5982\\u679C\\u9700\\u8981\\u7EDF\\u8BA1\\u4E0D\\u540C\\u6E20\\u9053\\uFF0C\\u90A3\\u5C31\\u4E0D\\u80FD\\u6709\\u8FD9\\u4E2A\\u903B\\u8F91\\n    if(count($url) > 0) {\\n        return $response->withJson(array('status' => 1, 'key' => $url[0]->get(\\\"key\\\")));\\n    } else {\\n        // \\u5148\\u521B\\u5EFA\\n        $su = new LeanObject(\\\"short_url\\\");\\n        $su->set(\\\"value\\\", $data[\\\"url\\\"]);\\n\\n        $so = new SaveOption();\\n        $so->fetchWhenSave = true;\\n        $su->save($so);\\n\\n        // \\u7136\\u540E\\u6839\\u636E\\u81EA\\u589E ID \\u66F4\\u65B0\\u77ED\\u7801\\n        $index = $su->get('index');\\n        $key = from10to62($index);\\n        $su->set(\\\"key\\\", $key);\\n        $su->save();\\n\\n        return $response->withJson(array('status' => 0, 'key' => $key));\\n    }\\n});\\n\"\n    }],\n    withTitle: true,\n    column: true,\n    titleBar: \"src/views/new_url.phtml\",\n    mdxType: \"CodeWithPreview\"\n  }), mdx(\"p\", null, \"\\uD83D\\uDC46 \\u751F\\u6210\\u548C\\u8DF3\\u8F6C\\u7684\\u670D\\u52A1\\u7AEF\\u4EE3\\u7801\"), mdx(\"h4\", null, \"5. \\u4EE3\\u7801\"), mdx(SourceCodeLink, {\n    url: \"https://cnb.cool/ubug/leancloud-things/engine\",\n    name: \"\\u540E\\u7AEF\\u4EE3\\u7801\",\n    desc: \"\\u6574\\u4E2A\\u540E\\u7AEF\\u7684\\u4EE3\\u7801\\u90FD\\u5F88\\u7B80\\u5355\\uFF0C\\u91CC\\u9762\\u8DDF\\u81EA\\u5DF1\\u90E8\\u7F72\\u7684\\u6709\\u70B9\\u4E0D\\u540C\",\n    mdxType: \"SourceCodeLink\"\n  }), mdx(\"h2\", null, \"5. \\u6700\\u540E\"), mdx(\"p\", null, \"\\u77ED\\u94FE\\u63A5\\u670D\\u52A1\\u76EE\\u524D\\u6709\\u5F88\\u5927\\u7528\\u5904\\uFF0C\\u5206\\u53D1\\u548C\\u7EDF\\u8BA1\\u5728\\u5F53\\u524D\\u8FD9\\u4E2A\\u5927\\u6570\\u636E\\u65F6\\u4EE3\\u6709\\u5F88\\u5927\\u7684\\u4EF7\\u503C\\u3002\\u505A\\u77ED\\u94FE\\u63A5\\u670D\\u52A1\\u5927\\u90E8\\u5206\\u4E5F\\u662F\\u7528\\u6765\\u6536\\u96C6\\u7528\\u6237\\u8BBF\\u95EE\\u3001\\u9875\\u9762\\u8BBF\\u95EE\\u7B49\\uFF0C\\u5404\\u4E2A\\u5927\\u516C\\u53F8\\u4E5F\\u90FD\\u6709\\u5F88\\u6210\\u719F\\u7684\\u65B9\\u6848\\u3002\"), mdx(\"p\", null, \"\\u5BF9\\u4E8E\\u6211\\u672C\\u8EAB\\uFF0C\\u6574\\u4E2A\\u9700\\u6C42\\u672C\\u8EAB\\u4E5F\\u4E0D\\u590D\\u6742\\uFF0C\\u6BD4\\u8F83\\u6709\\u610F\\u601D\\u7684\\u70B9\\u5728\\u4E8E\\u7528 BaaS \\u7684\\u6A21\\u5F0F\\u4E0D\\u7528\\u5F88\\u591A\\u4EE3\\u7801\\u5C31\\u80FD\\u5B9E\\u73B0\\u4E2A\\u5927\\u5DEE\\u4E0D\\u79BB\\uFF0C\\u5F53\\u7136\\u76EE\\u524D\\u53EA\\u662F\\u4E2A Demo\\uFF0C\\u81EA\\u5DF1\\u4E5F\\u4E0D\\u77E5\\u9053\\u7528\\u5728\\u54EA\\u3002\"), mdx(\"p\", null, \"\\u540E\\u671F\\u770B\\u5FC3\\u60C5\\u53EF\\u80FD\\u589E\\u52A0\\u7EDF\\u8BA1\\u529F\\u80FD\\u3001\\u81EA\\u52A8\\u4E8C\\u7EF4\\u7801\\u3001\\u52A0\\u5BC6\\u3001\\u81EA\\u5B9A\\u4E49\\u7B49\\u529F\\u80FD\\uFF0C\\u4E5F\\u53EF\\u80FD\\u843D\\u5728\\u8FD9\\u5403\\u7070\\u3002\"));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"aeffecb6-2cf0-561d-97a4-21fa330c5443","prev":{"fileAbsolutePath":"E:/u-codes/storybok/content/blog/novus2/novus2.md","id":"c74b9e5e-a3b3-59f4-b395-5784d8964b97","parent":{"name":"novus2","sourceInstanceName":"blog"},"excerpt":"PS: 建议配合上篇文章食用  📦 实现一个简单朴素的 react 数据管理层 NOVUS PS 2 : 有意思的点： Novus 版本的 Fiber，喘息机制 ， 自动收集订阅依赖问题 ， 完善的测试 PS 3 : 前端项目中的数据层被造轮子无数，有很多优秀的库，大厂更不用说内部成熟的解决方案。这只是我在项目中实践的一个解决方案，仅供参考。 一、考虑不周和隐患 当时的出发点主要是想搭上 TS…","fields":{"title":"📦 改进一个简单朴素的 react 数据管理层 NOVUS","slug":"/blog/novus-2","description":"上次造的轮子在好几个项目中落地，因为造的有点仓促，只顾了几个痛点，很多没有考虑周到的地方在实践的时候暴露出来，这里记录下中间改进的地方。","date":"2020-10-17","redirects":null,"datetime":"2020-10-17 22:50:20","categories":["code"],"series":null,"tags":["整理","思考","功能","NOVUS","状态管理"],"status":"online"},"frontmatter":{"published":null,"tags":["整理","思考","功能","NOVUS","状态管理"],"theme":null,"slug":"novus-2","date":"2020-10-17 22:50:20"},"body":"const _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/* @jsx mdx */\n\nconst _frontmatter = {\n  \"slug\": \"novus-2\",\n  \"title\": \"📦 改进一个简单朴素的 react 数据管理层 NOVUS\",\n  \"date\": \"2020-10-17 22:50:20\",\n  \"author\": \"Ubug\",\n  \"description\": \"上次造的轮子在好几个项目中落地，因为造的有点仓促，只顾了几个痛点，很多没有考虑周到的地方在实践的时候暴露出来，这里记录下中间改进的地方。\",\n  \"categories\": [\"code\"],\n  \"tags\": [\"整理\", \"思考\", \"功能\", \"NOVUS\", \"状态管理\"],\n  \"banner\": \"./banner.png\"\n};\nconst makeShortcode = name => function MDXDefaultShortcode(props) {\n  console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n  return mdx(\"div\", props);\n};\nconst SourceCodeLink = makeShortcode(\"SourceCodeLink\");\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  let {\n      components\n    } = _ref,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"PS: \\u5EFA\\u8BAE\\u914D\\u5408\\u4E0A\\u7BC7\\u6587\\u7AE0\\u98DF\\u7528 \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/blog/novus\"\n  }, \"\\uD83D\\uDCE6 \\u5B9E\\u73B0\\u4E00\\u4E2A\\u7B80\\u5355\\u6734\\u7D20\\u7684 react \\u6570\\u636E\\u7BA1\\u7406\\u5C42 NOVUS\"))), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"PS\", mdx(\"sup\", null, \"2\"), \": \\u6709\\u610F\\u601D\\u7684\\u70B9\\uFF1A\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#2.5%20%E8%AE%A2%E9%98%85%E8%A7%A6%E5%8F%91%20%E2%80%9C%E5%96%98%E6%81%AF%E6%9C%BA%E5%88%B6%E2%80%9D%20%EF%BC%8CNovus%20%E7%89%88%E6%9C%AC%E7%9A%84%20Fiber\"\n  }, \"Novus \\u7248\\u672C\\u7684 Fiber\\uFF0C\\u5598\\u606F\\u673A\\u5236\"), \"\\uFF0C\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#2.4%20%E8%87%AA%E5%8A%A8%E6%94%B6%E9%9B%86%E8%AE%A2%E9%98%85%E4%BE%9D%E8%B5%96%E9%97%AE%E9%A2%98\"\n  }, \"\\u81EA\\u52A8\\u6536\\u96C6\\u8BA2\\u9605\\u4F9D\\u8D56\\u95EE\\u9898\"), \"\\uFF0C\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"#2.6%20%E5%AE%8C%E5%96%84%E7%9A%84%E6%B5%8B%E8%AF%95\"\n  }, \"\\u5B8C\\u5584\\u7684\\u6D4B\\u8BD5\"))), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"PS\", mdx(\"sup\", null, \"3\"), \": \\u524D\\u7AEF\\u9879\\u76EE\\u4E2D\\u7684\\u6570\\u636E\\u5C42\\u88AB\\u9020\\u8F6E\\u5B50\\u65E0\\u6570\\uFF0C\\u6709\\u5F88\\u591A\\u4F18\\u79C0\\u7684\\u5E93\\uFF0C\\u5927\\u5382\\u66F4\\u4E0D\\u7528\\u8BF4\\u5185\\u90E8\\u6210\\u719F\\u7684\\u89E3\\u51B3\\u65B9\\u6848\\u3002\\u8FD9\\u53EA\\u662F\\u6211\\u5728\\u9879\\u76EE\\u4E2D\\u5B9E\\u8DF5\\u7684\\u4E00\\u4E2A\\u89E3\\u51B3\\u65B9\\u6848\\uFF0C\\u4EC5\\u4F9B\\u53C2\\u8003\\u3002\"))), mdx(\"h2\", null, \"\\u4E00\\u3001\\u8003\\u8651\\u4E0D\\u5468\\u548C\\u9690\\u60A3\"), mdx(\"p\", null, \"\\u5F53\\u65F6\\u7684\\u51FA\\u53D1\\u70B9\\u4E3B\\u8981\\u662F\\u60F3\\u642D\\u4E0A TS \\u7684\\u8BED\\u6CD5\\u63D0\\u793A\\uFF0C\\u8BA9\\u53EF\\u63A8\\u65AD\\u7684\\u6D41\\u7545\\u6027\\u5E2E\\u52A9\\u6211\\u4EEC\\u66F4\\u597D\\u7684\\u7F16\\u7801\\uFF0C\\u7136\\u540E\\u5B8C\\u6210\\u548C\\u4E3B\\u8981\\u4E1A\\u52A1\\u7684\\u914D\\u5408\\uFF0C\\u4E0D\\u8FC7\\u5F88\\u597D\\u7684\\u5B8C\\u6210\\u4E86\\u9879\\u76EE\\u7684\\u6570\\u636E\\u652F\\u6491\\u3002\"), mdx(\"p\", null, \"\\u56DE\\u8FC7\\u5934\\u770B\\u5176\\u4E2D\\u4E5F\\u9047\\u5230\\u4E86\\u5F88\\u591A\\u95EE\\u9898\\u548C\\u9690\\u60A3\\uFF1A\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u6B21 setState \\u90FD\\u9700\\u8981\\u66F4\\u65B0\\u5168\\u90E8\\u8BA2\\u9605\\uFF0C\\u5373\\u4F7F\\u5728\\u4E00\\u4E2A EventLoop \\u4E2D\\u4E5F\\u53EF\\u80FD\\u4F1A\\u89E6\\u53D1\\u591A\\u6B21\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u6B21\\u66F4\\u65B0\\u8BA2\\u9605\\u90FD\\u662F\\u540C\\u6B65\\u6267\\u884C\\uFF0C\\u8BA2\\u9605\\u7EC4\\u4EF6\\u8FC7\\u591A\\u7684\\u60C5\\u51B5\\uFF0C\\u66F4\\u65B0\\u64CD\\u4F5C\\u76F4\\u63A5\\u6D89\\u53CA\\u5230 render \\u548C\\u76F8\\u5173\\u8BA1\\u7B97\\uFF0C\\u5373\\u4F7F\\u8003\\u8651\\u5230 react \\u5185\\u7F6E\\u7684 fiber\\uFF0C\\u8FD9\\u4E2A\\u4E5F\\u53EF\\u80FD\\u4F1A\\u963B\\u585E CPU\\uFF0C\\u65E0\\u6CD5\\u54CD\\u5E94\\u7528\\u6237\\u64CD\\u4F5C\\uFF0C\\u9020\\u6210\\u5361\\u987F\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u6B21\\u8BA2\\u9605\\u64CD\\u4F5C\\u90FD\\u9700\\u8981\\u624B\\u52A8\\u8BA2\\u9605\\uFF0C\\u8FD8\\u9700\\u8981\\u4FDD\\u8BC1\\u548C\\u51FD\\u6570\\u5185\\u4E00\\u81F4\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u6B21\\u8BA2\\u9605\\u7684\\u4EFB\\u4E00\\u72B6\\u6001\\u66F4\\u65B0\\u90FD\\u4F1A\\u89E6\\u53D1\\u6574\\u4E2A model \\u7684\\u5168\\u90E8\\u8BA2\\u9605\\uFF0C\\u7C92\\u5EA6\\u4E0D\\u7CBE\\u7EC6\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4F5C\\u4E3A\\u4E00\\u4E2A\\u57FA\\u7840\\u5C42\\u7684\\u652F\\u6301\\uFF0C\\u7F3A\\u5C11\\u5B8C\\u5584\\u7684\\u6D4B\\u8BD5\")), mdx(\"p\", null, \"\\u5176\\u4E2D\\u4E00\\u90E8\\u5206\\u662F\\u8003\\u8651\\u4E0D\\u5468\\uFF0C\\u53E6\\u4E00\\u65B9\\u9762\\u4E5F\\u8981\\u5F53\\u65F6\\u7684\\u8003\\u91CF\\u3002\\u8FD9\\u6B21\\u6539\\u8FDB\\u5176\\u4E2D\\u5F88\\u5F71\\u54CD\\u4F7F\\u7528\\u7684\\u70B9\\uFF0C\\u76EE\\u6807\\u662F\\u7528\\u8D77\\u6765\\u4E0D\\u90A3\\u4E48\\u78D5\\u789C\\u3002\"), mdx(\"h2\", null, \"\\u4E8C\\u3001\\u6539\\u8FDB\"), mdx(\"h3\", null, \"2.1 setState \\u7684\\u540C\\u6B65\\u6267\\u884C\\u548C\\u89E6\\u53D1\\u8BA2\\u9605\\u95EE\\u9898\"), mdx(\"p\", null, \"\\u8FD9\\u91CC\\u7684 setState \\u548C react \\u5185\\u90E8\\u7684\\u4E0D\\u4E00\\u6837\\uFF0C\\u540E\\u9762\\u8BA8\\u8BBA\\u4E0D\\u8981\\u5947\\u602A\\u4E3A\\u4EC0\\u4E48\\u3002\"), mdx(\"p\", null, \"\\u51FA\\u53D1\\u70B9\\u548C\\u60F3\\u4FDD\\u7559\\u7684\\u7279\\u6027\\uFF1A\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"setState \\u662F\\u663E\\u5F0F\\u7684\\u66F4\\u65B0\\u72B6\\u6001\\uFF0C\\u65E0\\u610F\\u53BB\\u76F4\\u63A5\\u5728\\u72B6\\u6001\\u4E0A\\u505A\\u4EE3\\u7406\\u6216\\u8005\\u81EA\\u52A8\\u68C0\\u6D4B\\uFF0C\\u60F3\\u7684\\u662F\\u66F4\\u660E\\u663E\\u7684\\u4E3B\\u52A8\\u66F4\\u65B0\\u72B6\\u6001\\u548C\\u6E32\\u67D3\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u53CA\\u65F6\\u66F4\\u65B0\\uFF0C\\u4E0D\\u50CF react \\u5185\\u90E8\\u5B9E\\u73B0\\uFF0C\\u6BCF\\u6B21 setState \\u4E4B\\u540E\\u9700\\u8981\\u5728\\u56DE\\u8C03\\u4E2D\\u624D\\u80FD\\u8BFB\\u53D6\\u66F4\\u65B0\\u540E\\u7684\\u503C\\uFF0C\\u8FD9\\u91CC\\u8FD8\\u662F\\u60F3\\u53EA\\u8981 setState \\u5C31\\u66F4\\u65B0\\u5230\\u6570\\u636E\\u5C42\\u4E0A\\u53BB\\uFF0C\\u540C\\u6B65\\u8BFB\\u53D6\\u4E5F\\u80FD\\u5F97\\u5230\\u66F4\\u65B0\\u4E4B\\u540E\\u7684\\u503C\\u3002\")), mdx(\"p\", null, \"\\u90A3\\u4E48\\u95EE\\u9898\\u7684\\u89E3\\u51B3\\u5C31\\u53EA\\u80FD\\u662F\\u5728 setState \\u4E4B\\u540E\\u4E0D\\u7ACB\\u9A6C\\u89E6\\u53D1\\u4E8B\\u4EF6\\u901A\\u77E5\\u4E86\\uFF1A\"), mdx(\"p\", null, \"\\u65E7\\u7684\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"/**\\n * \\u7EAF\\u51FD\\u6570\\u7684\\u6570\\u636E\\u66F4\\u65B0\\u51FD\\u6570\\uFF0C\\u540C\\u6B65\\u6267\\u884C\\n *\\n * @param state \\u8981\\u66F4\\u65B0\\u7684\\u5C5E\\u6027\\u6216\\u8005\\u51FD\\u6570\\n */\\nprotected setState = <K extends keyof S>(\\n  state: Pick<S, K> | ((states: S) => Pick<S, K>)\\n) => {\\n  if (typeof state === \\\"function\\\") {\\n    const newState = state(this.state)\\n    this.state = { ...this.state, ...newState }\\n  } else {\\n    this.state = { ...this.state, ...state }\\n  }\\n  this.notifyChanges()\\n}\\n/**\\n * \\u901A\\u77E5\\u4E0A\\u5C42\\u89E6\\u53D1\\u8BA2\\u9605\\u7684 connect \\u8F6C\\u6362\\u51FD\\u6570\\uFF0C\\u6BCF\\u6B21\\u4FEE\\u6539 state \\u5FC5\\u987B\\u89E6\\u53D1\\uFF01\\uFF01\\uFF01\\n */\\nprotected notifyChanges = () => {\\n  // \\u9700\\u8981\\u901A\\u77E5\\u8BA2\\u9605\\u5668\\u5C31\\u540C\\u6B65\\u53BB\\u901A\\u77E5\\uFF0C\\u7ACB\\u5373\\u9A6C\\u4E0A\\uFF0C\\u540C\\u4E00\\u4E2A\\u961F\\u5217\\u4E2D\\u7684\\u591A\\u6B21\\u8C03\\u7528\\u4F1A\\u6709\\u5361\\u987F\\u95EE\\u9898\\n  novus.notifyChangesListeners(this.namespace)\\n}\\n\")), mdx(\"p\", null, \"\\u65E7\\u7248\\u672C\\u6BCF\\u6B21\\u8C03\\u7528 setState \\u90FD\\u4F1A\\u76F4\\u63A5\\u53BB\\u540C\\u6B65\\u901A\\u77E5\\u5168\\u90E8\\u7684\\u8BA2\\u9605\\uFF0C\\u6BCF\\u6B21\\u8C03\\u7528\\u90FD\\u4F1A\\u5FE0\\u5B9E\\u7684\\u6267\\u884C\\u8BA2\\u9605\\u51FD\\u6570\\uFF0C\\u6240\\u4EE5\\u4E0D\\u540C\\u51FD\\u6570\\u4E2D\\u8FDE\\u7EED\\u8C03\\u7528\\u4F1A\\u51FA\\u73B0\\u95EE\\u9898:\"), mdx(\"p\", null, mdx(\"figure\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"493px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/4a8533abb788eca7fcd77a99808d66c7/1197b/novus-issue.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.79536679536679%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACWklEQVQ4y5WTS2/aQBSF/Wf7Byq1qy7aqpsuUgkllZBKg5IGg40fY3vMwxgwhEfjYCBQSCmkcQIJP+P0ekiltosoXXwaz2DOnHvvsaQUCuj6Ojo+Q9hyEAYM434F8yjAbNDELHoa84dVSh22oZdXML0Ylr+GVd/AbtyBN7dw/oE/8Ni5dHDoQ3Mi5I0zGO4FKsEVvHaMausncf3fSAfZBgkOYVXncOtLErxGvXsHv7MR1E7XxO2TkVKZGnQ+hmoPUSQ0foFSYyXEE6qt+A/Rx8TXVBkJfkhzmFSqwgawKjOw0hR2spZnMOiZ+z9I9Iacx6i0Hgjiv/etWLzD61eQ3qYsqHyCYy1EsTSDE9yCd7cotalkUfpakDj4vQpH9OzR6rVvBMlZqUk9fLlnI8um2M+f4aMa4XOui1zGw6E2hOpOYFA7dD4iR7sh1cSf12Jf727Q7N+j0btH0N+iSr9J7/YdMBpIXm5BtYbQtT6cnA+VDaHYIyh0JrMJdEoC1wpwLQ6jPKd3B2KQSUt4bUHrAm6DSn6zp8MqT2FlOFy1C+YvBUblEjl9AJ11YBsMmn2OvDkgQtEexYpwovVQYLRXInw6Dmmw3yC9el+A45FDcmLTTYn9JuGQqGxGMJ2vqLg1VJtLlClSCUfFUCTjRBtDNiaUjLFICKteQnr+OktTnVKw6Qa6dZdHKqO+gqyHomTFnoopJj1LsnmknonsyvqIhL+L3DZ6dygnQ3n2Ig3bW+DEiIQj2UwExuT4QjgpWKNdAviUPtE5iu4M6S+n4jyhSAnRS3PqK7XIHOEXAQtLDgqoii8AAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"性能问题\",\n    \"title\": \"性能问题\",\n    \"src\": \"/static/4a8533abb788eca7fcd77a99808d66c7/1197b/novus-issue.png\",\n    \"srcSet\": [\"/static/4a8533abb788eca7fcd77a99808d66c7/ae269/novus-issue.png 259w\", \"/static/4a8533abb788eca7fcd77a99808d66c7/1197b/novus-issue.png 493w\"],\n    \"sizes\": \"(max-width: 493px) 100vw, 493px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"\\u6027\\u80FD\\u95EE\\u9898\"), \"\\n  \")), mdx(\"p\", null, \"\\u89E3\\u51B3\\u65B9\\u6848\\u5F88\\u7B80\\u5355\\uFF0C\\u8BA9 setState \\u7F13\\u4E00\\u7F13\\uFF0C\\u8003\\u8651\\u5230 Event Loop \\u7684\\u673A\\u5236\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"/**\\n * \\u901A\\u8FC7\\u6807\\u5FD7\\u53D8\\u91CF\\u63A7\\u5236\\u591A\\u6B21\\u7684\\u4E8B\\u4EF6\\u901A\\u77E5\\u5728\\u4E00\\u4E2A EventLoop \\u4E2D\\u53EA\\u89E6\\u53D1\\u4E00\\u6B21\\n */\\nprotected waitingNotify = false\\n/**\\n * \\u901A\\u77E5\\u4E0A\\u5C42\\u89E6\\u53D1\\u8BA2\\u9605\\u7684 connect \\u8F6C\\u6362\\u51FD\\u6570\\uFF0C\\u6BCF\\u6B21\\u4FEE\\u6539 state \\u5FC5\\u987B\\u89E6\\u53D1\\uFF01\\uFF01\\uFF01\\n */\\nprotected notifyChanges = () => {\\n  /** v1 \\u9700\\u8981\\u901A\\u77E5\\u8BA2\\u9605\\u5668\\u5C31\\u540C\\u6B65\\u53BB\\u901A\\u77E5\\uFF0C\\u7ACB\\u5373\\u9A6C\\u4E0A\\uFF0C\\u540C\\u4E00\\u4E2A\\u961F\\u5217\\u4E2D\\u7684\\u591A\\u6B21\\u8C03\\u7528\\u4F1A\\u6709\\u5361\\u987F\\u95EE\\u9898\\n  novus.notifyChangesListeners(this.namespace)\\n  **/\\n\\n  // v2 \\u9700\\u8981\\u901A\\u77E5\\u8BA2\\u9605\\u5668\\uFF0C\\u7A0D\\u7B49\\u4E00\\u4E0B\\uFF0C\\u4E0B\\u4E2A\\u4EFB\\u52A1\\u961F\\u5217\\u7ED3\\u675F\\u5C31\\u901A\\u77E5\\uFF0C\\u5148\\u628A\\u8FD9\\u4E2A\\u4EFB\\u52A1\\u961F\\u5217\\u7684\\u5168\\u90E8 setState \\u6267\\u884C\\u5B8C\\u6BD5\\n  // setState \\u662F\\u540C\\u6B65\\u7684\\uFF0C\\u4F46\\u662F\\u4E8B\\u4EF6\\u901A\\u77E5\\u4E0D\\u662F\\u540C\\u6B65\\n  if (this.waitingNotify) return\\n  this.waitingNotify = true\\n  new Promise((r) => r()).then(() => {\\n    novus.notifyChangesListeners(this.namespace)\\n    this.waitingNotify = false\\n  })\\n}\\n\")), mdx(\"p\", null, \"\\u8FD9\\u6837 notifyChanges \\u5728\\u540C\\u4E00\\u4E2A EventLoop \\u4E2D\\u5C31\\u53EA\\u4F1A\\u8C03\\u7528\\u4E00\\u6B21\\u4E86\\u3002\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"PS: \\u5176\\u4E2D\\u6D89\\u53CA\\u5230 EventLoop \\u7684\\u70B9\\u5728 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Promise.then\"), \" \\u4E2D\\uFF0C\\u6211\\u4EEC\\u7684\\u76EE\\u7684\\u662F\\u5C06\\u5168\\u90E8 setState \\u89E6\\u53D1\\u7684 notifyChanges hold \\u4F4F\\uFF0C\\u76F4\\u5230\\u672C\\u8F6E\\u4E8B\\u4EF6\\u5FAA\\u73AF\\u7ED3\\u675F\\u3002\\u4ECE Event Loop \\u7684\\u5B8F\\u4EFB\\u52A1\\u3001\\u5FAE\\u4EFB\\u52A1\\u7684\\u903B\\u8F91\\u4E0A\\u8003\\u8651\\uFF0CPromise.then \\u8868\\u793A\\u628A\\u5F53\\u524D\\u56DE\\u8C03\\u653E\\u5230\\u5FAE\\u4EFB\\u52A1\\u4E2D\\uFF0C\\u6240\\u4EE5\\u5F53\\u524D\\u5B8F\\u4EFB\\u52A1\\u7ED3\\u675F\\u5C31\\u4F1A\\u53BB\\u5FAE\\u4EFB\\u52A1\\u4E2D\\u68C0\\u67E5\\uFF0C\\u4E5F\\u5C31\\u80FD\\u591F\\u5728\\u5176\\u4ED6\\u5B8F\\u4EFB\\u52A1\\u4E4B\\u524D\\u89E6\\u53D1\\u6211\\u4EEC\\u7684\\u76EE\\u6807 notifyChanges\\u3002\")), mdx(\"p\", null, mdx(\"figure\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"416px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/ca0989f0fb1dc48432f2ba50548ee084/b0aec/novus-issue-after.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"61.38996138996139%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACV0lEQVQoz22SSW4TURCGe8+KA7BlwQE4BRIHYMUNWLFBKLHEJmJypCgsAIkQJZ6623aPdrfbTnuK7dixYzLYjhMIdiwFxBl+qsqJEoZFdem9Ln3/X1VP8SvfwRFUpyhUJzdiehnzc1CbwqtMEM924WY0mIYH02mhXO4hLDXhlc+Eo/Cn8A/s/+ETMGnuIWUdUOxT9ElkhmD7B4r1c+Eo+fCb0DnyN+KPu3CubhdPsboWIpnZQTLbRpxy2vkCqzCE6Q+lVnGKJ1LsSeuTv+L6rlifwSyM8fylCtXsEnAXiWwHm3oT8TQLdERY0ew9uMUxGGx6A1IbwcgfSXboPps/lLNBOWF0sfBag2b1kDR2kTIY2kYi0xZgxt0noDuAah9Cs/uIpVuI6dfBLWVzBCQhwzsiYI+AOlQCbmoNcch1urQ9IvEjKLl8AzmvCc05IKUdKWDFOMG5FXYX1M7nLQcnWHyTFof8T3f6klWzJ8K8D+XdcgS+tQbDaZPDjljnInbLDrm1qzlnvCEWXmlI0QzZHf9jZ+7WV9jBmPIplOjyCt5HnyGWKlHhngAFSjCeEc+YW/QrZ7IUBmpWV+5kOUbnckkdgh5DWYzauHP/EZZWsrALA/nBrajmrizl6p2WqGVLWtZh+QNZAD8XnQRZdA4cQYm8TeP2vYd4+mIDbjCUVriYoRz8zng2RZqj4R+D601aUMY9kGXwPBnIY2DXytKqi1t3H+DxkyiSehUf13182ggQNmaod36h2v6JSusCNcr8HiPkcD2+hZi2Le4+fM7TOYRNrsPmBX4DRUz94klk65kAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"性能问题 after\",\n    \"title\": \"性能问题 after\",\n    \"src\": \"/static/ca0989f0fb1dc48432f2ba50548ee084/b0aec/novus-issue-after.png\",\n    \"srcSet\": [\"/static/ca0989f0fb1dc48432f2ba50548ee084/ae269/novus-issue-after.png 259w\", \"/static/ca0989f0fb1dc48432f2ba50548ee084/b0aec/novus-issue-after.png 416w\"],\n    \"sizes\": \"(max-width: 416px) 100vw, 416px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"\\u6027\\u80FD\\u95EE\\u9898 after\"), \"\\n  \")), mdx(\"p\", null, \"\\u8FD9\\u6837\\uFF0C\\u5C31\\u7B97\\u51FD\\u6570\\u94FE\\u4E2D\\u8C03\\u7528\\u4E86\\u518D\\u591A\\u6B21\\u72B6\\u6001\\u66F4\\u65B0\\uFF0C\\u89E6\\u53D1\\u7684\\u4E8B\\u4EF6\\u901A\\u77E5\\u4E5F\\u53EA\\u4F1A\\u5728\\u8FD9\\u4E00\\u4E2A\\u4E8B\\u4EF6\\u5FAA\\u73AF\\u7ED3\\u675F\\u540E\\u624D\\u4F1A\\u89E6\\u53D1\\uFF0C\\u907F\\u514D\\u89E6\\u53D1\\u592A\\u591A\\u65E0\\u7528\\u7684\\u8BA1\\u7B97\\u548C\\u6E32\\u67D3\\u3002\"), mdx(\"h3\", null, \"2.2 \\u72B6\\u6001\\u53D8\\u66F4\\u624D\\u4F1A\\u91CD\\u65B0\\u6E32\\u67D3\"), mdx(\"p\", null, \"\\u7C92\\u5EA6\\u66F4\\u7EC6\\uFF0C\\u76EE\\u7684\\u662F\\u8BA9\\u53D8\\u66F4\\u7684\\u5F71\\u54CD\\u4EC5\\u9650\\u4E8E\\u5FC5\\u8981\\u7684\\u6E32\\u67D3\\u548C\\u8BA1\\u7B97\\u3002\"), mdx(\"p\", null, \"\\u8BA2\\u9605\\u673A\\u5236\\u662F\\u57FA\\u4E8E\\u6574\\u4E2A\\u6570\\u636E\\u6A21\\u578B\\u7684\\uFF0C\\u72B6\\u6001\\u53D8\\u66F4 -> \\u901A\\u77E5\\u8BA2\\u9605 -> \\u8BA2\\u9605\\u91CD\\u65B0\\u8BA1\\u7B97\\u5168\\u90E8\\u7684\\u7EC4\\u4EF6\\u72B6\\u6001 -> \\u7EC4\\u4EF6\\u72B6\\u6001\\u89E6\\u53D1\\u6E32\\u67D3\\u3002\"), mdx(\"p\", null, \"\\u65E7\\u7248\\u672C\\u7684\\u673A\\u5236\\u662F\\u76F4\\u63A5\\u8BA1\\u7B97\\u51FA\\u7ED3\\u679C\\u5C31\\u66F4\\u65B0\\u5230\\u72B6\\u6001\\uFF0C\\u56E0\\u4E3A\\u8BA1\\u7B97\\u7ED3\\u679C\\u662F\\u65B0\\u7684\\u503C\\uFF0C\\u65E0\\u8BBA\\u662F\\u5426\\u6574\\u4E2A\\u72B6\\u6001\\u662F\\u4E0D\\u662F\\u786E\\u5B9E\\u6709\\u53D8\\u52A8\\uFF0C\\u90FD\\u4F1A\\u5BFC\\u81F4\\u91CD\\u65B0\\u6E32\\u67D3\\u7684\\u89E6\\u53D1\\u3002\"), mdx(\"p\", null, \"\\u4E0B\\u9762\\u7B80\\u5355\\u6D45\\u6BD4\\u8F83\\u4E00\\u4E0B\\uFF0C\\u80FD\\u591F\\u7A0D\\u5FAE\\u907F\\u514D\\u4E0D\\u5FC5\\u8981\\u7684\\u6E32\\u67D3\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"setState(oldState => {\\n  let newState = mapStatetoHooks(novus.models, novus)\\n\\n  /**\\n   * \\u8FD9\\u4E2A\\u5730\\u65B9\\n   * 1. \\u89C6\\u56FE\\u4E0E\\u72B6\\u6001\\u662F\\u4E00\\u4E00\\u5BF9\\u5E94\\uFF0C\\u5982\\u679C state \\u6CA1\\u6709\\u53D8\\uFF0C\\u90A3\\u4E48\\u4E0D\\u5E94\\u8BE5\\u901A\\u77E5\\u6E32\\u67D3\\u7EC4\\u4EF6\\n   * 2. \\u5982\\u679C\\u6309\\u7167\\u4E8B\\u4EF6\\u6765\\u8BF4\\uFF0C\\u8FD9\\u91CC\\u786E\\u5B9E\\u6709 setState \\u7684\\u8C03\\u7528\\uFF0C\\u5E94\\u8BE5\\u901A\\u77E5\\u6E32\\u67D3\\u7EC4\\u4EF6\\uFF0C\\u7EC4\\u4EF6\\u662F\\u5426\\u5F71\\u54CD\\u5B50\\u7EC4\\u4EF6\\u53EF\\u4EE5\\u7528 Pure \\u5B50\\u7EC4\\u4EF6\\u91CC\\u63A7\\u5236\\n   */\\n  // \\u2193 \\u6D45\\u6BD4\\u8F83\\u4E00\\u4E0B\\u5224\\u65AD\\u662F\\u5426\\u9700\\u8981\\u66F4\\u65B0 state\\uFF0C\\u89E6\\u53D1\\u8BA2\\u9605\\n  for (const key in oldState) {\\n    if (oldState[key] !== newState[key]) {\\n      return newState\\n    }\\n  }\\n  return oldState\\n\\n  // \\u2193 \\u4E0D\\u6BD4\\u8F83\\uFF0C\\u53EA\\u8981\\u6709 setState \\u52A8\\u4F5C\\uFF0C\\u5C31\\u66F4\\u65B0 state\\n  // return newState;\\n})\\n\")), mdx(\"p\", null, \"\\u5982\\u679C\\u4E25\\u683C\\u6267\\u884C\\u72B6\\u6001\\u7684\\u7C92\\u5B50\\u6027\\uFF0C\\u4E5F\\u5C31\\u662F\\u6BCF\\u4E2A model \\u7684\\u72B6\\u6001\\u90FD\\u662F\\u57FA\\u7840\\u6570\\u636E\\u7C7B\\u578B\\u6216\\u8005\\u4E0D\\u53EF\\u53D8\\u6570\\u636E\\uFF0C\\u90A3\\u4E48\\u8FD9\\u4E2A\\u6D45\\u6BD4\\u8F83\\u4F1A\\u907F\\u514D\\u975E\\u9884\\u671F\\u89E6\\u53D1\\uFF08\\u5BF9\\u8C61\\u5F15\\u7528\\u975E\\u539F\\u5730\\u672A\\u4FEE\\u6539\\uFF09\\u6216\\u8005\\u6F0F\\u89E6\\u53D1\\u95EE\\u9898\\uFF08\\u5BF9\\u8C61\\u5F15\\u7528\\u539F\\u5730\\u4FEE\\u6539\\uFF09\\u3002\"), mdx(\"h3\", null, \"2.3 \\u91CD\\u590D\\u521D\\u59CB\\u5316\\u95EE\\u9898\"), mdx(\"p\", null, \"\\u65E7\\u7248\\u672C\\u5728\\u903B\\u8F91\\u4E2D\\u8D1F\\u8D23\\u5E94\\u7528 hooks \\u7684 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"useState\"), \" \\u72B6\\u6001\\u521D\\u59CB\\u5316\\u7528\\u5230\\u7684\\u662F\\u7528\\u6237\\u81EA\\u5B9A\\u4E49\\u7684\\u51FD\\u6570\\uFF0C\\u4E00\\u5F00\\u59CB\\u8BA1\\u7B97\\u51FA\\u521D\\u59CB\\u503C\\u5C31\\u5B8C\\u6210\\u4E86\\u4ED6\\u7684\\u4EFB\\u52A1\\uFF0C\\u4F46\\u662F\\u5728\\u540E\\u7EED\\u7684\\u6E32\\u67D3\\u4E2D\\uFF0C\\u56E0\\u4E3A\\u51FD\\u6570\\u7EC4\\u4EF6\\u7684\\u7F18\\u6545\\uFF0C\\u5373\\u4F7F\\u4E0D\\u9700\\u8981\\u4E86\\uFF0C\\u8FD9\\u4E2A\\u8BA1\\u7B97\\u4E5F\\u6CA1\\u6709\\u514D\\u9664\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"let [state, setState] = useState<T>(mapStatetoHooks(novus.models, novus))\\n\")), mdx(\"p\", null, \"\\u81F3\\u4E8E\\u89E3\\u51B3\\u65B9\\u6CD5\\uFF0C\\u53EA\\u9700\\u8981\\u4E00\\u4E2A\\u4FDD\\u6301\\u4E0D\\u53D8\\u7684\\u5F15\\u7528\\uFF0C\\u4E5F\\u5C31\\u662F \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ref\"), \" \\u5373\\u53EF\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"const initState = useRef<T | null>(null);\\n\\nif(initState.current === null) {\\n  initState.current = mapStatetoHooks(novus.models, novus);\\n}\\nlet [state, setState] = useState<T>(initState.current);\\n\")), mdx(\"p\", null, \"\\u80FD\\u591F\\u51CF\\u5C11\\u4E00\\u70B9\\u4E0D\\u5FC5\\u8981\\u7684\\u8BA1\\u7B97\\uFF0C\\u4E5F\\u7B97\\u662F\\u6027\\u80FD\\u4F18\\u5316\\u7684\\u8D21\\u732E\\u4E86\\u3002\"), mdx(\"h3\", null, \"2.4 \\u81EA\\u52A8\\u6536\\u96C6\\u8BA2\\u9605\\u4F9D\\u8D56\\u95EE\\u9898\"), mdx(\"p\", null, \"\\u8FD9\\u4E2A\\u662F\\u975E\\u5E38\\u5927\\u7684\\u75DB\\u70B9\\uFF0C\\u56E0\\u4E3A\\u65E7\\u7248\\u672C\\u6BCF\\u6B21 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"useNovus\"), \" \\u7684\\u65F6\\u5019\\uFF0C\\u90FD\\u9700\\u8981 deps \\u4F9D\\u8D56\\u5217\\u8868\\uFF0C\\u4F46\\u662F\\u624B\\u52A8\\u5199\\u7684\\u8FD9\\u4E2A\\u503C\\u5E94\\u8BE5\\u548C\\u51FD\\u6570\\u4E2D\\u8C03\\u7528\\u5230\\u7684\\u76F8\\u5BF9\\u5E94\\uFF0C\\u8FD9\\u4E0D\\u5E94\\u8BE5\\u662F\\u5F00\\u53D1\\u8005\\u9700\\u8981\\u5C0F\\u5FC3\\u7FFC\\u7FFC\\u81EA\\u5DF1\\u817E\\u632A\\u62F7\\u8D1D\\u547D\\u540D\\u7A7A\\u95F4\\u7684\\u5730\\u65B9\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const [isTitleChanged, isContentChanged, diffStyle] = useNovus(\\n  models => {\\n    return [\\n      models.noteModel.state.isTitleChanged,\\n      models.noteModel.state.isContentChanged,\\n      models.noteModel.state.diffStyle,\\n    ]\\n  },\\n  [\\\"noteModel\\\"] // <------------!!\\n)\\n\")), mdx(\"p\", null, \"\\u90A3\\u4E48\\u600E\\u4E48\\u77E5\\u9053\\u51FD\\u6570\\u4E2D\\u4F7F\\u7528\\u5230\\u90A3\\u4E9B model \\u4E86\\u5462\\uFF1F\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// \\u63D0\\u4F9B\\u4E00\\u4E2A\\u83B7\\u53D6 model \\u7684\\u65B9\\u6CD5\\uFF0C\\u4F7F\\u7528\\u8FD9\\u4E2A\\u65B9\\u6CD5\\u5728\\u521D\\u59CB\\u5316\\u72B6\\u6001\\u7684\\u65F6\\u5019\\u6536\\u96C6\\u4F9D\\u8D56\\nconst mapStatetoProps = getModel => {\\n  return [\\n    getModel('noteModel').state.isTitleChanged,\\n    getModel('noteModel').state.isContentChanged,\\n  ]\\n}\\n\\nconst deps = new Set([])\\n\\nconst getModel = (namespace) => {\\n  deps.add(namespace)                 // \\u51FD\\u6570\\u91CC\\u9762\\u6536\\u96C6\\n  return novus.getModel(namespace)\\n}\\n\\ninitState = mapStatetoProps(getModel)\\n\")), mdx(\"p\", null, \"\\u6216\\u8005\\u4F7F\\u7528\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const mapStatetoProps = models => {\\n  return [\\n    models.noteModel.state.isTitleChanged,\\n    models.noteModel.state.isContentChanged,\\n  ]\\n}\\n\\nconst deps = new Set([])\\n\\n// \\u4F7F\\u7528 Proxy \\u4EE3\\u7406\\u7684\\u5F62\\u5F0F\\uFF0C\\u62E6\\u622A\\u5BF9 models \\u7684\\u8BBF\\u95EE\\nconst handler = {\\n    get: function(obj, prop) {\\n      deps.add(prop)                                // \\u5728\\u4EE3\\u7406\\u91CC\\u9762\\u83B7\\u53D6\\n      return prop in obj ? obj[prop] : undefined;\\n    }\\n};\\nconst models = new Proxy(novus.models, handler);\\ninitState = mapStatetoProps(models)\\n\")), mdx(\"p\", null, \"\\u4E24\\u79CD\\u65B9\\u6CD5\\u8C03\\u7528\\u5F62\\u5F0F\\u4E0D\\u540C\\uFF0C\\u4F46\\u662F\\u539F\\u7406\\u76F8\\u4F3C\\uFF0C\\u524D\\u9762\\u7684\\u51FD\\u6570\\u8C03\\u7528\\u53EF\\u80FD\\u6709\\u70B9\\u4E0D\\u7075\\u6D3B\\uFF0C\\u6240\\u4EE5\\u4EE3\\u7406 Proxy \\u7684\\u5F62\\u5F0F\\u53EF\\u80FD\\u66F4\\u597D\\u4E9B\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"let initState;\\nconst _deps = useRef<string[] | undefined>(deps);\\n\\nif (typeof deps === \\\"undefined\\\") {\\n  // \\u4E00\\u4E2A\\u4F9D\\u8D56\\u5217\\u8868\\n  const autoDeps = new Set([]);\\n  // \\u4EE3\\u7406\\u7684\\u5904\\u7406\\u51FD\\u6570\\n  const handler = {\\n    // \\u6BCF\\u6B21\\u83B7\\u53D6\\u5143\\u7D20\\u7684\\u65F6\\u5019\\u4EE3\\u7406\\u5230\\u8FD9\\u91CC\\n    get(target: TModelsPool, key: string) {\\n      // \\u6536\\u96C6\\u8FD9\\u6B21\\u7684 model \\u547D\\u540D\\u7A7A\\u95F4\\u4F9D\\u8D56\\n      if (target[key]) {\\n        autoDeps.add(key);\\n      }\\n      // \\u4E0D\\u7834\\u574F\\u9884\\u671F\\u7684\\u5904\\u7406\\u903B\\u8F91\\n      return target[key];\\n    },\\n  };\\n  // \\u5728\\u539F novus.models \\u4E0A\\u6DFB\\u52A0\\u8FD9\\u4E2A\\u4EE3\\u7406\\n  const autoModels = new Proxy(novus.models, handler);\\n  // \\u7B2C\\u4E00\\u6B21\\u521D\\u59CB\\u5316\\u7684\\u65F6\\u5019\\u8FD0\\u884C\\u8FD9\\u4E2A\\u6536\\u96C6\\u51FD\\u6570\\n  initState = mapStatetoHooks(autoModels, novus);\\n  // \\u4EE3\\u66FF\\u672A\\u6307\\u5B9A\\u7684\\u4F9D\\u8D56\\u5217\\u8868\\n  _deps.current = Array.from(autoDeps);\\n} else {\\n  initState = mapStatetoHooks(novus.models, novus);\\n}\\n\\nlet [state, setState] = useState<T>(initState);\\n\")), mdx(\"p\", null, \"\\u4E8B\\u5B9E\\u8BC1\\u660E\\uFF0C\\u8FD9\\u4E2A\\u673A\\u5236\\u8FD8\\u662F\\u975E\\u5E38\\u6709\\u6548\\u679C\\u7684\\uFF0C\\u4E0D\\u5FC5\\u663E\\u5F0F\\u7684\\u624B\\u52A8\\u58F0\\u660E\\uFF0C\\u5168\\u90E8\\u81EA\\u7136\\u7684\\u6536\\u96C6\\u3002\\u540C\\u65F6\\u5E76\\u6CA1\\u6709\\u5F88\\u660E\\u663E\\u7684\\u8FDD\\u80CC\\u7528\\u6237\\u90E8\\u5206\\u4EE3\\u7801\\u7684\\u9884\\u671F\\uFF0C\\u6CA1\\u6709\\u521B\\u5EFA\\u65B0\\u7684\\u8BED\\u6CD5\\u4EC0\\u4E48\\u7684\\uFF0C\\u6211\\u4EEC\\u53EA\\u662F\\u6084\\u6084\\u7684\\u5728\\u540E\\u9762\\u591A\\u505A\\u4E86\\u4E00\\u70B9\\u5DE5\\u4F5C\\u3002\"), mdx(\"p\", null, \"\\u81EA\\u6B64\\uFF0C\\u7528\\u6237\\u53EA\\u9700\\u8981\\u5173\\u5FC3\\u9700\\u8981\\u4EC0\\u4E48\\u72B6\\u6001\\uFF0C\\u5728\\u51FD\\u6570\\u91CC\\u9762\\u83B7\\u53D6\\u5230\\u8FD9\\u4E9B\\u72B6\\u6001\\uFF0C\\u6211\\u4EEC\\u80FD\\u591F\\u81EA\\u52A8\\u7684\\u8DDF\\u8E2A\\u53D8\\u66F4\\uFF0C\\u54CD\\u5E94\\u5F0F\\u89E6\\u53D1\\u6E32\\u67D3\\u4E86\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"const [isTitleChanged, isContentChanged] = useNovus(models => {\\n  const { state } = models.noteModel\\n  return [\\n    state.isTitleChanged,\\n    state.isContentChanged,\\n  ]\\n})\\n\")), mdx(\"h3\", null, \"2.5 \\u8BA2\\u9605\\u89E6\\u53D1 \\u201C\\u5598\\u606F\\u673A\\u5236\\u201D \\uFF0CNovus \\u7248\\u672C\\u7684 Fiber\"), mdx(\"p\", null, \"\\u6700\\u540E\\u8FD9\\u4E2A\\u662F\\u4E00\\u4E2A\\u4E0D\\u662F\\u5F88\\u5F71\\u54CD\\u4F7F\\u7528\\uFF0C\\u4F46\\u662F\\u9700\\u8981\\u8003\\u8651\\u5230\\u7684\\u95EE\\u9898\\u3002\\u4E8B\\u5B9E\\u4E0A React \\u672C\\u8EAB\\u7684\\u6E32\\u67D3\\u673A\\u5236 Fiber\\uFF0C\\u5DF2\\u7ECF\\u88AB\\u5F88\\u591A\\u4EBA\\u719F\\u77E5\\u4E86\\u3002\\u6570\\u636E\\u5C42\\u7684\\u8BA2\\u9605\\u901A\\u77E5\\u662F\\u5728 Fiber \\u673A\\u5236\\u4E4B\\u524D\\uFF0C\\u8BA1\\u7B97\\u91CF\\u672C\\u4E0D\\u4F1A\\u5F88\\u5927\\uFF0C\\u4E0D\\u592A\\u4F1A\\u5F71\\u54CD\\u6E32\\u67D3\\u7684\\u8017\\u65F6\\uFF0C\\u611F\\u89C9\\u6CA1\\u6709\\u5FC5\\u8981\\u8003\\u8651\\u8FD9\\u4E9B\\u4E8B\\u60C5\\u3002\\u4F46\\u662F\\u4E07\\u4E00\\u5982\\u679C\\u7528\\u6237\\u7684\\u8BA1\\u7B97\\u51FD\\u6570\\u6D89\\u53CA\\u5230\\u7684\\u8BA1\\u7B97\\u6BD4\\u8F83\\u591A\\uFF0C\\u540C\\u65F6\\u8FD8\\u6709\\u975E\\u5E38\\u591A\\u7684\\u7EC4\\u4EF6\\u8BA2\\u9605\\u7684\\u60C5\\u51B5\\u4E0B\\uFF0C\\u8FD9\\u91CC\\u8FD8\\u662F\\u4F1A\\u6709\\u4E00\\u70B9\\u70B9\\u7684\\u95EE\\u9898\\u7684\\u3002\"), mdx(\"p\", null, \"Fiber \\u89E3\\u51B3\\u7684\\u662F\\u89C6\\u56FE\\u5C42\\u66F4\\u65B0\\u5360\\u7528\\u6267\\u884C\\u6808\\u7684\\u95EE\\u9898\\uFF0Creact \\u901A\\u8FC7\\u9012\\u5F52\\u7684\\u65B9\\u5F0F\\u8FDB\\u884C\\u6E32\\u67D3\\u7EC4\\u4EF6\\u6811\\uFF0C\\u6574\\u4E2A\\u6267\\u884C\\u6D41\\u7A0B\\u4F1A\\u5217\\u961F\\u5728\\u6267\\u884C\\u6808\\u4E2D\\uFF0C\\u76F4\\u5230\\u6267\\u884C\\u5B8C\\u6BD5\\u624D\\u7B97\\u5B8C\\u3002Fiber \\u628A\\u8FD9\\u4E2A\\u9012\\u5F52\\u53D8\\u66F4\\u6210\\u4E86\\u94FE\\u5F0F\\u8C03\\u7528\\uFF0C\\u6267\\u884C\\u7684\\u987A\\u5E8F\\u4E0D\\u662F\\u5FC5\\u987B\\u5230\\u5E95\\uFF0C\\u53EF\\u4EE5\\u5728\\u6267\\u884C\\u65F6\\u95F4\\u8D85\\u8FC7 16ms \\u540E\\u628A\\u5269\\u4E0B\\u7684\\u6D41\\u7A0B\\u8F6C\\u5230\\u4E0B\\u4E00\\u4E2A\\u5B8F\\u4EFB\\u52A1\\u4E2D\\uFF0C\\u8FD9\\u6837\\u8BA9\\u6D4F\\u89C8\\u5668\\u68C0\\u67E5\\u5FAE\\u4EFB\\u52A1\\u548C\\u5176\\u4ED6\\u7684\\u5B8F\\u4EFB\\u52A1\\uFF0C\\u6BD4\\u5982\\u54CD\\u5E94\\u7528\\u6237\\u64CD\\u4F5C\\u548C\\u66F4\\u65B0\\u9875\\u9762\\u89C6\\u56FE\\u3002\"), mdx(\"p\", null, \"\\u6211\\u4EEC\\u8FD9\\u91CC\\u7684\\u8BA2\\u9605\\u66F4\\u65B0\\u662F\\u7528\\u7684\\u8FED\\u4EE3\\uFF0C\\u540C\\u6837\\u4F1A\\u51FA\\u73B0\\u5360\\u7528\\u6267\\u884C\\u6808\\u7684\\u95EE\\u9898\\u3002\\u8003\\u8651\\u5B9E\\u73B0\\u65B9\\u6848\\uFF0C\\u4E00\\u65B9\\u9762\\u6570\\u7EC4\\u5982\\u679C\\u5143\\u7D20\\u6CA1\\u6709\\u53D1\\u751F\\u53D8\\u52A8\\u7684\\u8BDD\\uFF0C\\u53EF\\u4EE5\\u4FDD\\u5B58\\u8FED\\u4EE3\\u7684\\u5E8F\\u53F7\\uFF0C\\u4E0D\\u9700\\u8981\\u6539\\u6210\\u94FE\\u8868\\u4E5F\\u80FD\\u65AD\\u70B9\\u91CD\\u6765\\uFF0C\\u4F46\\u662F\\u8FD9\\u4E2A\\u65E0\\u6CD5\\u4FDD\\u8BC1\\uFF0C\\u53E6\\u4E00\\u65B9\\u9762\\u628A\\u8FED\\u4EE3\\u6539\\u6210\\u94FE\\u8868\\uFF0C\\u53EA\\u662F\\u4E3A\\u4E86\\u4FDD\\u7559\\u8FDB\\u5EA6\\u5F15\\u7528\\u7684\\u8BDD\\u5DE5\\u4F5C\\u91CF\\u5C31\\u6709\\u70B9\\u5927\\u4E86\\u3002\"), mdx(\"p\", null, \"\\u770B\\u4E0B\\u65E7\\u7248\\u672C\\u4EE3\\u7801\\uFF0C\\u89E6\\u53D1\\u8BA2\\u9605\\u51FD\\u6570\\u7528\\u7684\\u662F\\u5FAA\\u73AF\\uFF0C\\u5373\\u4F7F\\u7528\\u5230\\u4E86\\u547D\\u540D\\u7A7A\\u95F4\\u7684\\u8FC7\\u6EE4\\uFF0C\\u5982\\u679C \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"listeners\"), \" \\u8FD9\\u4E2A\\u5217\\u8868\\u4E2D\\u4FDD\\u5B58\\u7684\\u8BA2\\u9605\\u51FD\\u6570\\u8FC7\\u591A\\uFF08\\u56E0\\u4E3A\\u662F\\u5168\\u5C40\\u7684\\u6570\\u636E\\u5C42\\uFF0C\\u7EC4\\u4EF6\\u5F88\\u591A\\u7684\\u65F6\\u5019\\u8FD9\\u4E2A\\u6709\\u5F88\\u5927\\u53EF\\u80FD\\uFF09\\u3001\\u8BA1\\u7B97\\u91CF\\u5F88\\u5927\\u3001\\u5168\\u90FD\\u662F\\u540C\\u6B65 CPU \\u5BC6\\u96C6\\u578B\\u7684\\u8BA1\\u7B97\\uFF0C\\u90A3\\u4E48\\u8FD9\\u91CC\\u4F1A\\u51FA\\u73B0\\u6392\\u961F\\u73B0\\u8C61\\uFF0C\\u8017\\u65F6\\u5982\\u679C\\u8D85\\u8FC7 16ms\\uFF0C\\u4F1A\\u8BA9 JS \\u8FDB\\u7A0B\\u65E0\\u6CD5\\u6B63\\u5E38\\u8FDB\\u884C\\u4E8B\\u4EF6\\u5FAA\\u73AF\\uFF0C\\u6BD4\\u5982\\u68C0\\u67E5\\u5FAE\\u4EFB\\u52A1\\u4E2D\\u7684\\u56DE\\u8C03\\u5217\\u8868\\uFF0C\\u65E0\\u6CD5\\u54CD\\u5E94\\u7528\\u6237\\u7684\\u64CD\\u4F5C\\uFF0C\\u6240\\u4EE5\\u8FD9\\u91CC\\u786E\\u5B9E\\u5E94\\u8BE5\\u4F1A\\u88AB\\u89C6\\u4E3A\\u5361\\u987F\\u70B9\\u3002\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"/**\\n  * \\u89E6\\u53D1\\u5668\\uFF0C\\u66F4\\u65B0\\u5B8C\\u6570\\u636E\\u4ED3\\u4E4B\\u540E\\u5FC5\\u987B\\u89E6\\u53D1\\u624D\\u80FD\\u901A\\u77E5 UI \\u53D8\\u66F4\\n  *\\n  * @param namespace model \\u7684\\u547D\\u540D\\u7A7A\\u95F4 id\\uFF0C\\u53EA\\u4F1A\\u89E6\\u53D1\\u8BA2\\u9605\\u5BF9\\u5E94 model \\u7684 mapStatetoProps \\u51FD\\u6570\\u3002\\u7559\\u7A7A\\u8868\\u793A\\u89E6\\u53D1\\u5168\\u90E8\\n  */\\nnotifyChangesListeners = (namespace?: string) => {\\n  // TODO: \\u987A\\u5E8F\\u6267\\u884C\\u5168\\u90E8\\u7684\\u4E8B\\u4EF6\\u901A\\u77E5\\uFF0C\\u5982\\u679C\\u8FD9\\u4E2A\\u6BD4\\u8F83\\u591A\\uFF0C\\u53EF\\u80FD\\u76F4\\u63A5\\u963B\\u585E\\u4E86 CPU\\uFF0C\\u65E0\\u6CD5\\u54CD\\u5E94\\u7528\\u6237\\u64CD\\u4F5C\\uFF0C\\u9020\\u6210\\u5361\\u987F\\n  this.listeners.forEach(v => {\\n    if (\\n      typeof namespace === \\\"undefined\\\" ||\\n      v[1].length === 0 ||\\n      v[1].includes(namespace)\\n    ) {\\n      v[0]()\\n    }\\n  })\\n}\\n\")), mdx(\"p\", null, \"\\u8FD9\\u91CC\\u5E94\\u8BE5\\u9002\\u5F53\\u7684\\u65F6\\u95F4\\u628A\\u5B8F\\u4EFB\\u52A1\\u7684\\u961F\\u5217\\u5207\\u5206\\u4E3A\\u591A\\u4E2A\\u5B8F\\u4EFB\\u52A1\\uFF0C\\u8BA9\\u5FAE\\u4EFB\\u52A1\\u548C\\u5176\\u4ED6\\u5B8F\\u4EFB\\u52A1\\u80FD\\u591F\\u7A7F\\u63D2\\u6267\\u884C\\uFF0C\\u8BA9\\u754C\\u9762\\u83B7\\u5F97 \\u201C\\u5598\\u606F\\u201D \\u673A\\u4F1A\\u3002\"), mdx(\"p\", null, \"\\u8003\\u8651\\u5230\\u8FD9\\u8FB9\\u7684\\u8C03\\u7528\\u65B9\\u6848\\u4E5F\\u4E0D\\u662F\\u6811\\u5F62\\u7684\\u5F62\\u5F0F\\uFF0C\\u6240\\u4EE5\\u6211\\u8FD9\\u8FB9\\u91C7\\u53D6\\u4E86\\u4E0D\\u4E00\\u6837\\u7684\\u89E3\\u51B3\\u65B9\\u6848\\uFF1A\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"notifyChangesListeners = (namespace?: string) => {\\n  this.listeners.forEach((v, key) => {\\n    if (typeof namespace === \\\"undefined\\\" || v[1].length === 0 || v[1].includes(namespace)) {\\n      // \\u5C06\\u9700\\u8981\\u901A\\u77E5\\u7684\\u51FD\\u6570\\u653E\\u8FDB\\u961F\\u5217\\u7B49\\u5F85\\u901A\\u77E5\\n      this.needNotifiedListeners.add(key);\\n    }\\n  });\\n  // \\u5148\\u628A\\u9700\\u8981\\u7684\\u5DE5\\u4F5C\\u8BB0\\u5F55\\uFF0C\\u53EF\\u4EE5\\u88AB\\u6253\\u65AD\\uFF0C\\u7136\\u540E\\u518D\\u901A\\u77E5\\u5404\\u4E2A\\u8BA2\\u9605\\n  this.startNotifies();\\n};\\n// \\u4E00\\u4E2A\\u5F85\\u6E32\\u67D3\\u5DE5\\u4F5C\\u6C60\\nneedNotifiedListeners = new Set<string>([]);\\nstartNotiTime: number;\\n// \\u88AB\\u89E6\\u53D1\\u5C31\\u4F1A\\u4E00\\u76F4\\u6309\\u7167\\u540E\\u9762\\u7684\\u903B\\u8F91\\u6267\\u884C\\uFF0C\\u76F4\\u5230\\u6E32\\u67D3\\u5DE5\\u4F5C\\u6C60\\u6E05\\u7A7A\\nstartNotifies = () => {\\n  // \\u5982\\u679C\\u4E4B\\u524D\\u7684\\u9057\\u7559\\u8FD8\\u5728\\uFF0C\\u5148\\u53D6\\u6D88\\uFF0C\\u5728\\u8FD9\\u6B21\\u6E32\\u67D3\\u4E2D\\u7EE7\\u7EED\\n  if(idleHandler) _cancelIdleCallback(idleHandler);\\n  // \\u6267\\u884C\\u4E4B\\u524D\\u5148\\u6807\\u8BB0\\u4E0B\\u65F6\\u95F4\\uFF0C\\u5728\\u9012\\u5F52\\u7684\\u8FC7\\u7A0B\\u4E2D\\u4F5C\\u4E3A\\u65F6\\u95F4\\u6807\\u8BB0\\n  this.startNotiTime = new Date().getTime();\\n  // \\u53BB\\u6267\\u884C\\u5224\\u65AD\\u903B\\u8F91\\n  this.doTheNotifies();\\n};\\n// \\u786E\\u5B9E\\u53BB\\u901A\\u77E5\\u8BA2\\u9605\\u7684\\u90E8\\u5206\\uFF0C\\u6839\\u636E\\u4E0D\\u540C\\u7684\\u6267\\u884C\\u53EF\\u80FD\\u5728\\u4E0D\\u540C\\u7684\\u5B8F\\u4EFB\\u52A1\\u961F\\u5217\\u88AB\\u6267\\u884C\\ndoTheNotifies = () => {\\n  if (this.needNotifiedListeners.size > 0) {\\n    const nextId = this.needNotifiedListeners.values().next().value;\\n    // \\u5148\\u5220\\u9664\\u7D22\\u5F15\\uFF0C\\u5728\\u540E\\u9762\\u6267\\u884C\\u7684\\u8FC7\\u7A0B\\u4E2D\\u5982\\u679C\\u8FD9\\u4E2A\\u8BA2\\u9605\\u53C8\\u88AB\\u8C03\\u7528\\u4E86\\uFF0C\\u6709\\u91CD\\u65B0\\u6267\\u884C\\u7684\\u673A\\u4F1A\\n    this.needNotifiedListeners.delete(nextId);\\n\\n    // \\u5B9E\\u9645\\u6267\\u884C\\u7684\\u90E8\\u5206\\uFF0C\\u53EF\\u80FD\\u7684\\u8017\\u65F6\\u64CD\\u4F5C\\n    this.listeners.get(nextId)[0]();\\n    \\n    // \\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\uD83D\\uDC47\\n    // \\u5982\\u679C\\u8FD0\\u884C\\u5B8C\\u7528\\u6237\\u7684\\u8BA1\\u7B97\\u4E4B\\u540E\\u8FD8\\u6709\\u65F6\\u95F4\\uFF0C\\u7EE7\\u7EED\\u9012\\u5F52\\uFF0C\\u5426\\u5219\\u7B49\\u5F85\\u4E0B\\u4E00\\u6B21\\u5B8F\\u4EFB\\u52A1\\n    if (new Date().getTime() - this.startNotiTime < 16) {\\n      this.doTheNotifies();\\n    } else {\\n      idleHandler = _requestIdleCallback(this.startNotifies);\\n    }\\n    // \\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\uD83D\\uDC46\\n  }\\n};\\n\")), mdx(\"p\", null, \"\\u6539\\u8FDB\\u7684\\u601D\\u8DEF\\u662F\\uFF0C\\u4ECE\\u4E4B\\u524D\\u8FED\\u4EE3\\u50BB\\u50BB\\u7684\\u76F4\\u63A5\\u53BB\\u6267\\u884C\\u8BA2\\u9605\\uFF0C\\u53D8\\u6210\\u8FED\\u4EE3\\u653E\\u5230\\u5F85\\u901A\\u77E5\\u5217\\u8868\\u4E2D\\uFF0C\\u8BA9\\u6267\\u884C\\u6808\\u53BB\\u8FED\\u4EE3\\u6267\\u884C\\uFF0C\\u5728\\u6BCF\\u6B21\\u6267\\u884C\\u7ED3\\u675F\\u540E\\u68C0\\u67E5\\u4ECE\\u5F00\\u59CB\\u5230\\u73B0\\u5728\\u662F\\u4E0D\\u662F\\u8D85\\u65F6\\u4E86\\uFF0C\\u6CA1\\u6709\\u7684\\u8BDD\\u9012\\u5F52\\u8FD0\\u884C\\u3002\\u4F46\\u662F\\u5982\\u679C\\u8D85\\u65F6\\u4E86\\uFF0C\\u90A3\\u4E48\\u628A\\u4E0B\\u4E2A\\u5FAA\\u73AF\\u518D\\u5904\\u7406\\u8FD9\\u4E2A\\u5F85\\u6267\\u884C\\u5217\\u8868\\uFF0C\\u56E0\\u4E3A\\u5168\\u5C40\\u7EF4\\u62A4\\u7684\\u662F\\u540C\\u4E00\\u4E2A\\u5217\\u8868\\uFF0C\\u6240\\u4EE5\\u5982\\u679C\\u591A\\u6B21\\u89E6\\u53D1\\u901A\\u77E5\\u5217\\u8868\\u7684\\u751F\\u6210\\uFF0C\\u4E5F\\u4E0D\\u4F1A\\u9020\\u6210\\u91CD\\u590D\\u901A\\u77E5\\u7684\\u60C5\\u51B5\\u3002\"), mdx(\"p\", null, \"\\u6574\\u4E2A\\u7ED3\\u679C\\u4E0A\\u770B\\uFF0C\\u5C31\\u662F\\u901A\\u77E5\\u8BA2\\u9605\\u7684\\u65F6\\u5019\\uFF0C\\u7528\\u6237\\u5982\\u679C\\u7EC4\\u4EF6\\u6BD4\\u8F83\\u591A\\uFF0C\\u5176\\u4E2D\\u4E00\\u4E9B\\u7EC4\\u4EF6\\u83B7\\u5F97\\u4E86\\u901A\\u77E5\\uFF0C\\u5B8C\\u6210\\u6E32\\u67D3\\uFF0C\\u8BA1\\u7B97\\u8D85\\u65F6\\u4E86\\uFF0C\\u90A3\\u4E48\\u7EC4\\u4EF6\\u7B49\\u5F85\\u4E0B\\u6B21\\u7A7A\\u95F2\\u518D\\u66F4\\u65B0\\uFF0C\\u628A\\u6574\\u4E2A\\u961F\\u5217\\u5207\\u7247\\u6210\\u5F88\\u591A\\u9636\\u6BB5\\u3002\"), mdx(\"p\", null, \"\\u603B\\u7684\\u6765\\u8BF4\\uFF0C\\u6539\\u8FDB\\u65B9\\u6848\\u867D\\u7136\\u6267\\u884C\\u7684\\u4EE3\\u7801\\u6CA1\\u6709\\u51CF\\u5C11\\uFF0C\\u4F46\\u662F\\u4ECE\\u6574\\u4E2A\\u8C03\\u5EA6\\u7684\\u89D2\\u5EA6\\u6765\\u770B\\uFF0C\\u5404\\u4E2A\\u4EFB\\u52A1\\u7A7F\\u63D2\\u8FDB\\u884C\\uFF0C\\u4F53\\u9A8C\\u4F1A\\u597D\\u5F88\\u591A\\uFF0C\\u5C24\\u5176\\u5BF9\\u4E8E\\u7EC6\\u7C92\\u5EA6\\u7684\\u7EC4\\u4EF6\\u7684\\u5927\\u578B\\u5E94\\u7528\\uFF0C\\u4F53\\u9A8C\\u7684\\u4F18\\u5316\\u4E00\\u5B9A\\u662F\\u6B63\\u5411\\u7684\\u3002\"), mdx(\"h3\", null, \"2.6 \\u5B8C\\u5584\\u7684\\u6D4B\\u8BD5\"), mdx(\"p\", null, \"\\u6D4B\\u8BD5\\u662F\\u4FDD\\u8BC1\\u5065\\u58EE\\u6027\\u7684\\u57FA\\u7840\\uFF0C\\u5BF9\\u4E8E\\u8FD9\\u4E2A\\u57FA\\u7840\\u5E93\\u6765\\u8BF4\\uFF0C\\u6574\\u4E2A\\u6570\\u636E\\u5C42\\u7684\\u673A\\u5236\\u5F71\\u54CD\\u6574\\u4E2A\\u5E94\\u7528\\u7684\\u8FD0\\u884C\\uFF0C\\u6240\\u4EE5\\u8BA2\\u9605\\u673A\\u5236\\u3001\\u6027\\u80FD\\u95EE\\u9898\\u3001\\u7EC4\\u4EF6\\u6E32\\u67D3\\u89E6\\u53D1\\u7B49\\u90FD\\u662F\\u9700\\u8981\\u4FDD\\u8BC1\\u80FD\\u8D70\\u5F97\\u901A\\uFF0C\\u5404\\u4E2A\\u8FB9\\u754C\\u6761\\u4EF6\\u90FD\\u9700\\u8981\\u6D4B\\u8BD5\\u53EF\\u884C\\uFF0C\\u6240\\u4EE5\\u4E00\\u4E2A\\u5B8C\\u5584\\u7684\\u6D4B\\u8BD5\\u975E\\u5E38\\u6709\\u5FC5\\u8981\\uFF0C\\u867D\\u7136\\u4F7F\\u7528\\u7075\\u6D3B\\u6027\\u592A\\u5927\\u53EF\\u80FD\\u65E0\\u6CD5\\u8986\\u76D6\\u5230\\u5168\\u90E8\\u7684\\u573A\\u666F\\u3002\"), mdx(\"p\", null, \"\\u540C\\u65F6\\u6D4B\\u8BD5\\u4E5F\\u662F\\u4FDD\\u8BC1\\u91CD\\u6784\\u4EE3\\u7801\\u6B63\\u786E\\u7684\\u57FA\\u7840\\uFF0C\\u6BD4\\u5982\\u8FD9\\u6B21\\u6539\\u8FDB\\u6D41\\u7A0B\\uFF0C\\u5C31\\u662F\\u5148\\u628A\\u6D4B\\u8BD5\\u6D41\\u7A0B\\u8D70\\u901A\\uFF0C\\u6DFB\\u52A0\\u65B0\\u529F\\u80FD\\u548C\\u6539\\u8FDB\\u539F\\u6709\\u903B\\u8F91\\u7684\\u65F6\\u5019\\uFF0C\\u8FD9\\u4E9B\\u6D4B\\u8BD5\\u4E00\\u76F4\\u5728\\u5E2E\\u6211\\u9A8C\\u8BC1\\u903B\\u8F91\\u7684\\u6B63\\u786E\\u6027\\uFF0C\\u5E76\\u4FDD\\u8BC1\\u6211\\u5168\\u90E8\\u7684\\u9700\\u6C42\\u90FD\\u80FD\\u8986\\u76D6\\u5E76\\u6B63\\u786E\\u5B9E\\u73B0\\u3002\"), mdx(\"p\", null, mdx(\"figure\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-figure\",\n    \"style\": {}\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"588px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/298aeb086997d204b9b4304a44bc3c64/8574b/test.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"142.0849420849421%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAD6klEQVRIx4VV23LbNhDlb1QiwStIELyTkijFduy6bpyHdiYz7Uyn7Vv//x9Oz4KiIyW287BDAAQWu+ecXXjhP08o//sd4zDi9vYO8zzjdDphHEdorZFlGdI0RZ7n0LR1XhQF8mKZB0EApZQzL8xSNIcJx9MHOplQGLMcprN1k+/775rsEadi3na7hUpjWGthqwpVXbtxpjN3e5IkVxG8ZlcRRnGMpu8wDAOdaKZROEeyLpdJBHJg/a72raNrh2OP/eHA6CoYplwzShlLtGVZLnNGLxnIf8FPXTi7ilBS6uhQM8WEYAvgabakq3XuUpa17EyQzGMGseJ3Ga3DUIUhisaibVt3u0RREsO6aRZcHbb2BeP1m58Zj6LoOkKfk9hotF2Hhk4lzY6Yrml2Xe/G63wdd9wvAYiULtOmQx+RThxWYqY0LorybPbC1j2yLjC8mrLgNhz2OJCUmYKWdPSZbYfdGU+xVZ/LXCMkXN8yTQwV8qp0GDrchEkXaekcCgmrFl+IuJDQd7KJheVpRE8djvxKyV1GJYyKXab1njmW01xTWwvAxVnYkpqLTAUuNXEYRqEbr7ZGFaqvY68qWWZxSqEqt6lgwQuz1hRoCMHQCuNkt6rR1oukWse4Rd/3C1TnAghIsJd1FbK+QlwwvSiGocOi4cGpgbEG5aGnE0ZPnKt9B00y7Ny7JqK1WOGykoxcysHOQt11UCXbkB9AxxH8lgz/undyUl9OyKzGtqGQnw9QW8rstxNMlaI0AYpcXcnHU9ysHkdngaFMRPmWJXbTIRJ8eJk49A1J4pripdHHgdGn6LsQTc0A/K9a9MKmQPTHLaI/7xB+7Km1DKo1Lppkw8NPO+Q98eG+/NMBIbFOGWHKfduNMHtNkhcyokiniPLUtayMJt+Ea4lIhgcz+Z/wH0tUajcppGsnbrzaKnJPk00jbcsuYjZNzbHlt0LBtaZuHJNiUssiLyNmymvjWdG0Fz/PSP99RHKoEbclkr8fkDxOSP66R7wj+ypaWta5bb1nEqXnzxU2NzV+Ctidcwr58x7+3mL7NGCr2fc22x++KZe90avYXMd5j924gx3Zku73qHYsw9sj2mlwgrW2euk+b5n0AMnEe3j4Bc/PnzH2fFNmSuTLLfSpxzzxkt1uKanwuuTeMsfyfDy5J1QmcstxPjrQK/eu1Lw1fvVRerM5TNMOA2u3lVqlmbxwcsmyhGVGufDmS5zWl/DNV68/7dE/3mD6+YYsG/isAJXm8GNKod2jHSY6T11Dlf4omErdrk6/cyi17H8asR0KBEOJ8EONyA6I63tE9R31uKMGG/feiLPj8eh65mazedXh/5a6JOvtPnFhAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"测试结果\",\n    \"title\": \"测试结果\",\n    \"src\": \"/static/298aeb086997d204b9b4304a44bc3c64/8574b/test.png\",\n    \"srcSet\": [\"/static/298aeb086997d204b9b4304a44bc3c64/ae269/test.png 259w\", \"/static/298aeb086997d204b9b4304a44bc3c64/a4dff/test.png 518w\", \"/static/298aeb086997d204b9b4304a44bc3c64/8574b/test.png 588w\"],\n    \"sizes\": \"(max-width: 588px) 100vw, 588px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"figcaption\", {\n    parentName: \"figure\",\n    \"className\": \"gatsby-resp-image-figcaption\"\n  }, \"\\u6D4B\\u8BD5\\u7ED3\\u679C\"), \"\\n  \")), mdx(\"p\", null, \"\\u5DE5\\u5177\\u7528\\u7684\\u662F \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Jest\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"@testing-library/react\"), \" \\u5F88\\u597D\\u7684\\u5B9E\\u73B0\\u5168\\u90E8\\u7684\\u76EE\\u6807\\u9700\\u6C42\\uFF0C\\u6E32\\u67D3\\u9884\\u671F\\u4E5F\\u90FD\\u7B26\\u5408\\uFF0C\\u8FD9\\u6837\\u7684\\u7ED3\\u679C\\u80FD\\u591F\\u8BA9\\u6211\\u80FD\\u591F\\u6BD4\\u8F83\\u81EA\\u4FE1\\u7684\\u76F4\\u63A5\\u5728\\u56E2\\u961F\\u9879\\u76EE\\u4E2D\\u5F15\\u5165\\uFF0C\\u76F8\\u4FE1\\u8FD9\\u4E2A\\u6570\\u636E\\u5C42\\u80FD\\u591F\\u53EF\\u9760\\u7684\\u652F\\u6491\\u8D77\\u9879\\u76EE\\u3002\"), mdx(\"h2\", null, \"\\u4E09\\u3001 \\u4EE3\\u7801\"), mdx(SourceCodeLink, {\n    url: \"https://cnb.cool/ubug/novus/novus\",\n    name: \"NOVUS\",\n    desc: \"\\uD83D\\uDCE6 \\u5B9E\\u73B0\\u4E00\\u4E2A\\u7B80\\u5355\\u6734\\u7D20\\u7684 react \\u6570\\u636E\\u7BA1\\u7406\\u5C42\",\n    mdxType: \"SourceCodeLink\"\n  }));\n}\n;\nMDXContent.isMDXComponent = true;"},"next":{"fileAbsolutePath":"E:/u-codes/storybok/content/blog/_drafts/2077/未来协议.md","id":"b93d0a40-fbc7-518b-9c5b-263f4376b4ae","parent":{"name":"未来协议","sourceInstanceName":"blog"},"excerpt":"…","fields":{"title":"⛓ 未来协议","slug":"/blog/future-protocol","description":"对未来互联网和生活的畅想，发挥点想象力的天马行空。","date":"2020-09-10","redirects":null,"datetime":"2020-09-10 17:26:31","categories":["code"],"series":null,"tags":["思考"],"status":"online"},"frontmatter":{"published":null,"tags":["思考"],"theme":null,"slug":"future-protocol","date":"2020-09-10 17:26:31"},"body":"const _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/* @jsx mdx */\n\nconst _frontmatter = {\n  \"slug\": \"future-protocol\",\n  \"title\": \"⛓ 未来协议\",\n  \"date\": \"2020-09-10 17:26:31\",\n  \"author\": \"Ubug\",\n  \"description\": \"对未来互联网和生活的畅想，发挥点想象力的天马行空。\",\n  \"categories\": [\"code\"],\n  \"tags\": [\"思考\"]\n};\nconst makeShortcode = name => function MDXDefaultShortcode(props) {\n  console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n  return mdx(\"div\", props);\n};\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  let {\n      components\n    } = _ref,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"hr\", null), mdx(\"p\", null, \"\\u7545\\u60F3\\u4E00\\u4E0B\\u672A\\u6765\\u4E16\\u754C\\uFF0C\\u5929\\u9A6C\\u884C\\u7A7A\\uFF0C\\u6280\\u672F\\u53D1\\u5C55\\u3002\"), mdx(\"hr\", null), mdx(\"h2\", null, \"\\u4E00\\u3001\\u8FC7\\u53BB\\u548C\\u73B0\\u5728\\u7684\\u534F\\u8BAE\\u662F\\u4EC0\\u4E48\"), mdx(\"p\", null, \"\\u534F\\u8BAE\\u662F\\u4EC0\\u4E48\\uFF0C\\u662F\\u7EA6\\u5B9A\\u7684\\u4E00\\u5957\\u89C4\\u5219\\u548C\\u534F\\u5B9A\\u3002\\u73B0\\u5728\\u6211\\u4EEC\\u7ECF\\u5E38\\u7B7E\\u7F72\\u7684\\u623F\\u5C4B\\u51FA\\u79DF\\u534F\\u8BAE\\uFF0C\\u7EA6\\u5B9A\\u623F\\u5C4B\\u5728\\u54EA\\uFF0C\\u623F\\u79DF\\u591A\\u5C11\\uFF0C\\u591A\\u957F\\u65F6\\u95F4\\u4EA4\\u4E00\\u6B21\\u623F\\u79DF\\uFF0C\\u623F\\u5C4B\\u6700\\u591A\\u4F4F\\u51E0\\u4E2A\\u4EBA\\uFF0C\\u7535\\u8D39\\u6C34\\u8D39\\u600E\\u4E48\\u4EA4\\u7B49\\u7B49\\u51FA\\u79DF\\u4EBA\\u548C\\u627F\\u79DF\\u4EBA\\u4E4B\\u95F4\\u7684\\u7EA6\\u5B9A\\u4E8B\\u9879\\u3002\"), mdx(\"p\", null, \"\\u7545\\u60F3\\u4E00\\u4E0B\\uFF0C\\u4ECE\\u53E4\\u81F3\\u4ECA\\u5404\\u79CD\\u534F\\u8BAE\\u7684\\u6982\\u5FF5\\uFF0C\\u53E4\\u65F6\\u5019\\u7528\\u8D1D\\u58F3\\u4EE3\\u66FF\\u94B1\\u5E01\\u662F\\u56E0\\u4E3A\\u7EA6\\u5B9A\\u4E86\\u8D1D\\u58F3\\u4F5C\\u4E3A\\u4EE5\\u7269\\u6613\\u7269\\u7684\\u4E2D\\u95F4\\u66FF\\u6362\\u54C1\\uFF0C\\u540E\\u6765\\u94B1\\u5E84\\u7684\\u94F6\\u7968\\u7EA6\\u5B9A\\u4E86\\u4E00\\u5F20\\u4E0D\\u597D\\u4F5C\\u5047\\u7684\\u7EB8\\u6765\\u4EE3\\u66FF\\u51E0\\u5341\\u4E0A\\u767E\\u65A4\\u7684\\u91D1\\u94F6\\uFF0C\\u8D70\\u9556\\u7684\\u7EA6\\u5B9A\\u4E00\\u5F20\\u5927\\u65D7\\u548C\\u6EE1\\u8F66\\u7BB1\\u5B50\\u8D27\\u7269\\u548C\\u73B0\\u5728\\u7684\\u96C6\\u88C5\\u7BB1\\u4E5F\\u6CA1\\u5565\\u533A\\u522B\\uFF0C\\u90FD\\u662F\\u534F\\u8BAE\\u7684\\u6807\\u51C6\\u5316\\uFF0C\\u7EDF\\u4E00\\u6807\\u51C6\\u5316\\u5C31\\u662F\\u8BA4\\u77E5\\u7684\\u7EDF\\u4E00\\u3002\"), mdx(\"p\", null, \"\\u4E66\\u540C\\u6587\\u3001\\u8F66\\u540C\\u8F68\\u7684\\u7EDF\\u4E00\\u6807\\u51C6\\u589E\\u901F\\u4E86\\u4E92\\u8054\\u4E92\\u901A\\uFF0C\\u5E26\\u6765\\u4E86\\u66F4\\u5927\\u7684\\u4EF7\\u503C\\uFF0C\\u8BA9\\u793E\\u4F1A\\u8FD0\\u8F6C\\u66F4\\u52A0\\u4FBF\\u6377\\u5FEB\\u901F\\u3002\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u73B0\\u4EE3\\u4E92\\u8054\\u7F51\\u534F\\u8BAE\\uFF1A\"), \" TCP\\u3001UDP\\u3001IP\\u3001HTTP\\u3001FTP\\u3001WS \\u7B49\\u7F51\\u7EDC\\u534F\\u8BAE\\u5C31\\u662F\\u4E00\\u4E2A\\u5F88\\u57FA\\u7840\\u7684\\u51FA\\u53D1\\u70B9\\uFF0C\\u8FD9\\u4E9B\\u6700\\u57FA\\u7840\\u7684\\u534F\\u8BAE\\u3002\\u6211\\u4EEC\\u5728\\u8FD9\\u4E9B\\u7684\\u57FA\\u7840\\u4E0A\\u642D\\u5EFA\\u4E86\\u73B0\\u4EE3\\u4E92\\u8054\\u7F51\\u3002\\u8FD9\\u4E9B\\u57FA\\u7840\\u7684\\u534F\\u8BAE\\u7ED9\\u6211\\u4EEC\\u65E0\\u7A77\\u65E0\\u5C3D\\u7684\\u60F3\\u8C61\\u529B\\uFF0C\\u8BA9\\u6211\\u4EEC\\u53EF\\u4EE5\\u7528\\u4E00\\u4E2A\\u5F88\\u4FBF\\u5B9C\\u7684\\u624B\\u673A\\u5C31\\u80FD\\u64CD\\u63A7\\u65E0\\u5C3D\\u7684\\u4FE1\\u606F\\u3002\"), mdx(\"p\", null, \"\\u672A\\u6765\\u5462\\uFF1F\\u4F1A\\u51FA\\u73B0\\u54EA\\u4E9B\\u6211\\u4EEC\\u4E0D\\u6562\\u60F3\\u8C61\\u7684\\u534F\\u8BAE\\uFF0C\\u80FD\\u8BA9\\u793E\\u4F1A\\u7FFB\\u5929\\u8986\\u5730\\u3002\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u534F\\u8BAE\\u6F14\\u8FDB\\u89C4\\u5F8B\"), \"\\uFF1A\\u4ECE\\u8D1D\\u58F3\\u5230\\u94F6\\u7968\\uFF0C\\u4ECE\\u7EB8\\u8D28\\u5408\\u540C\\u5230\\u7535\\u5B50\\u534F\\u8BAE\\uFF0C\\u4EBA\\u7C7B\\u793E\\u4F1A\\u7684\\u534F\\u8BAE\\u4E00\\u76F4\\u5728\\u5411\\u7740\\u66F4\\u9AD8\\u6548\\u3001\\u66F4\\u6807\\u51C6\\u3001\\u66F4\\u81EA\\u52A8\\u5316\\u7684\\u65B9\\u5411\\u53D1\\u5C55\\u3002\\u6BCF\\u4E00\\u6B21\\u534F\\u8BAE\\u7684\\u9769\\u65B0\\u90FD\\u5E26\\u6765\\u751F\\u4EA7\\u529B\\u7684\\u5DE8\\u5927\\u63D0\\u5347\\u3002\\u672A\\u6765\\u534F\\u8BAE\\u7684\\u53D1\\u5C55\\u5C06\\u4E0D\\u4EC5\\u4EC5\\u662F\\u6280\\u672F\\u5C42\\u9762\\u7684\\u8FDB\\u6B65\\uFF0C\\u66F4\\u662F\\u793E\\u4F1A\\u7EC4\\u7EC7\\u65B9\\u5F0F\\u7684\\u9769\\u547D\\u6027\\u53D8\\u5316\\u3002\"), mdx(\"h2\", null, \"\\u4E8C\\u3001\\u672A\\u6765\"), mdx(\"p\", null, \"\\u5F00\\u59CB\\u7545\\u60F3\\u65F6\\u95F4\\uFF0C\\u56E0\\u4E3A\\u8111\\u5BB9\\u91CF\\u6709\\u9650\\uFF0C\\u6240\\u4EE5\\u53EA\\u80FD\\u7528\\u5F88\\u591A\\u73B0\\u5728\\u7684\\u5F88\\u591A\\u6982\\u5FF5\\u6765\\u7C7B\\u6BD4\\uFF0C\\u91CD\\u70B9\\u4E5F\\u662F\\u805A\\u7126\\u5728\\u4EBA\\u8EAB\\u4E0A\\u3002\"), mdx(\"p\", null, \"\\u4E0D\\u50CF\\u8D5B\\u535A\\u670B\\u514B\\u90A3\\u6837\\u5404\\u79CD\\u4E49\\u80A2\\u7684\\u5B58\\u5728\\uFF0C\\u8FD9\\u91CC\\u4EC5\\u4EC5\\u63A2\\u8BA8\\u8F6F\\u4EF6\\u548C\\u786C\\u4EF6\\u5C42\\u9762\\uFF0C\\u5927\\u8303\\u56F4\\u7684\\u5411\\u5B8C\\u7F8E\\u4EBA\\u5DE5\\u667A\\u80FD\\u548C\\u673A\\u5668\\u4EBA\\u8FDB\\u5316\\u7684\\u8DEF\\u7EBF\\u6709\\u70B9\\u592A\\u8FDC\\u4E86\\uFF0C\\u4EBA\\u7684\\u610F\\u4E49\\u8FD8\\u662F\\u5728\\u4E8E\\u4EBA\\uFF0C\\u53EA\\u662F\\u591A\\u4E86\\u70B9\\u4FE1\\u606F\\u8F93\\u5165\\u8F93\\u51FA\\u3002\"), mdx(\"h3\", null, \"2.1 \\u672A\\u6765\\u7684\\u57FA\\u7840\\u8BBE\\u65BD\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u7B97\\u529B\\u8D44\\u6E90\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E3A\\u4E86\\u4EA7\\u51FA\\u6700\\u5927\\u5316\\uFF0C\\u7B97\\u529B\\u7684\\u751F\\u4EA7\\u4F1A\\u662F\\u4E00\\u4E2A\\u5927\\u751F\\u610F\\uFF0C\\u7C7B\\u4F3C\\u73B0\\u5728\\u7684\\u7535\\u529B\\u516C\\u53F8\\u91C7\\u8D2D\\u7164\\u70AD\\u7528\\u53D1\\u7535\\u673A\\u751F\\u4EA7\\u7535\\u529B\\uFF0C\\u4EE5\\u540E\\u7684\\u9AD8\\u79D1\\u6280\\u516C\\u53F8\\u4F1A\\u91C7\\u8D2D\\u7535\\u529B\\uFF08\\u57FA\\u7840\\u7684\\u539F\\u6599\\uFF09\\u7528\\u670D\\u52A1\\u5668\\uFF08\\u5DE5\\u5177\\uFF09\\u8FD0\\u884C\\u7A0B\\u5E8F\\uFF08\\u6D41\\u6C34\\u7EBF\\uFF09\\u751F\\u4EA7\\u7B97\\u529B\\u51FA\\u552E\\u3002\\u90E8\\u5206\\u9AD8\\u79D1\\u6280\\u516C\\u53F8\\u8FD8\\u53EF\\u4EE5\\u6839\\u636E\\u57FA\\u7840\\u7B97\\u529B\\u516C\\u53F8\\u63D0\\u4F9B\\u57FA\\u7840\\u7684SDK\\uFF0C\\u751F\\u4EA7\\u66F4\\u4E0A\\u5C42\\u7684\\u7B97\\u529B\\u670D\\u52A1\\uFF0C\\u6BD4\\u5982\\u4E2A\\u6027\\u5316\\u8D44\\u8BAF\\u8BA2\\u9605\\uFF0C\\u667A\\u80FD\\u5316\\u6536\\u96C6\\u5168\\u7403\\u8D44\\u8BAF\\uFF0C\\u4E2A\\u6027\\u5316\\u5904\\u7406\\u540E\\u63D0\\u4F9B\\u7ED9\\u6D88\\u8D39\\u8005\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7B97\\u529B\\u4F7F\\u7528\\u4E00\\u5B9A\\u4F1A\\u88AB\\u5236\\u4F5C\\u6210\\u901A\\u7528\\u6027\\u7684\\u6807\\u51C6\\u89C4\\u8303\\uFF0C\\u80FD\\u591F\\u5229\\u7528\\u9AD8\\u901F\\u4E92\\u8054\\u7684\\u4E92\\u8054\\u7F51\\u8FDB\\u884C\\u4F20\\u8F93\\uFF0C\\u901A\\u8FC7\\u5143\\u6570\\u636E\\u548C\\u5904\\u7406\\u80FD\\u529B\\u5C31\\u80FD\\u62FC\\u5408\\u6210\\u9AD8\\u7EA7\\u7B97\\u529B\\u903B\\u8F91\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u751F\\u4EA7\\u7B97\\u529B\\u7684\\u516C\\u53F8\\u4F1A\\u8D1F\\u8D23\\u9001\\u7B97\\u5165\\u6237\\uFF0C\\u5728\\u4E92\\u8054\\u7F51\\u94FE\\u8DEF\\u4E0AOTT\\uFF0C\\u7B97\\u529B\\u8D44\\u6E90\\u5F88\\u5BB9\\u6613\\u90E8\\u7F72\\u4F7F\\u7528\\uFF0C\\u6BCF\\u4E2A\\u4EBA\\u6216\\u8005\\u5BB6\\u5EAD\\u5F88\\u5BB9\\u6613\\u63A5\\u5165\\u7B97\\u529B\\uFF0C\\u7B97\\u529B\\u8D44\\u6E90\\u548C\\u670D\\u52A1\\u66F4\\u901A\\u7528\\uFF0C\\u4E5F\\u66F4\\u5BB9\\u6613\\u88AB\\u66FF\\u6362\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8FD9\\u4E9B\\u7B97\\u529B\\u7684\\u63A5\\u5165\\u4F1A\\u88AB\\u6253\\u5305\\u6210\\u5957\\u9910\\uFF0C\\u6210\\u4E3A\\u6BCF\\u4E2A\\u4EBA\\u7684\\u751F\\u6D3B\\u6210\\u672C\")), mdx(\"p\", null, \"\\u4EE5\\u4E0A\\u7684\\u7B97\\u529B\\u4F7F\\u7528\\u6D41\\u7A0B\\u662F\\u6734\\u7D20\\u601D\\u60F3\\u4E0B\\u7684\\u8DEF\\u5F84\\uFF0C\\u4F46\\u662F\\u6BCF\\u4E2A\\u73AF\\u8282\\u90FD\\u53EF\\u80FD\\u4EE5\\u53E6\\u4E00\\u79CD\\u5F62\\u5F0F\\u51FA\\u73B0\\u3002\\u6BD4\\u5982\\u641C\\u7D22\\u5F15\\u64CE\\u516C\\u53F8\\u4F1A\\u63D0\\u4F9B\\u5728\\u7EBF\\u641C\\u7D22\\u670D\\u52A1\\uFF0C\\u7528\\u6237\\u63D0\\u4F9B\\u641C\\u7D22\\u8BCD\\uFF0C\\u8FD4\\u56DE\\u641C\\u7D22\\u7ED3\\u679C\\u5C31\\u662F\\u4E00\\u4E2A\\u7B97\\u529B\\u7684\\u6D88\\u8D39\\u548C\\u4F7F\\u7528\\uFF0C\\u7528\\u6237\\u82B1\\u8D39\\u7684\\u662F\\u3010\\u770B\\u5E7F\\u544A\\u3011\\u5F97\\u5230\\u7684\\u662F\\u3010\\u641C\\u7D22\\u7ED3\\u679C\\u9875\\u3011\\u3002\\u7528\\u6237\\u9009\\u62E9\\u641C\\u7D22\\u5F15\\u64CE\\u7684\\u8FC7\\u7A0B\\u5C31\\u662F\\u63A5\\u5165\\u4E0D\\u540C\\u7684\\u7B97\\u529B\\u63D0\\u4F9B\\u5546\\u3002\\u4ECE\\u8FD9\\u4E2A\\u89D2\\u5EA6\\u6765\\u770B\\uFF0C\\u7B97\\u529B\\u5DF2\\u7ECF\\u7B97\\u662F\\u6211\\u4EEC\\u751F\\u6D3B\\u4E2D\\u7684\\u57FA\\u7840\\u539F\\u751F\\u8D44\\u6E90\\u4E86\\u3002\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u66F4\\u591A\\u4E2A\\u4EBA\\u4FE1\\u606F\\u88AB\\u91CF\\u5316\\uFF0C\\u7136\\u540E\\u6807\\u51C6\\u5316\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E2A\\u4EBA\\u4FE1\\u606F\\u7684\\u91CF\\u5316\\u66F4\\u52A0\\u5168\\u9762\\uFF0C\\u4E0D\\u4EC5\\u4EC5\\u662F\\u81EA\\u5DF1\\u7684\\u7F51\\u4E0A\\u4FE1\\u606F\\uFF0C\\u5305\\u62EC\\u81EA\\u5DF1\\u7684\\u4E2A\\u4EBA\\u5C5E\\u6027\\u548C\\u6570\\u636E\\uFF0C\\u50AC\\u751F\\u51FA\\u6570\\u5B57\\u5B6A\\u751F\\u6982\\u5FF5\\u3002\\u6BD4\\u5982\\u5174\\u8DA3\\u7231\\u597D\\u3001\\u6700\\u8FD1\\u7684\\u7F51\\u4E0A\\u884C\\u4E3A\\u3001\\u8EAB\\u4F53\\u6570\\u636E\\u3001\\u4F4D\\u7F6E\\u8F68\\u8FF9\\u3001\\u73AF\\u5883\\u4FE1\\u606F\\u3001\\u770B\\u5230\\u542C\\u5230\\u7684\\u4FE1\\u606F\\u3001\\u5DE5\\u4F5C\\u5F85\\u529E\\u548C\\u4F1A\\u8BAE\\u90AE\\u4EF6\\u3001\\u548C\\u4ED6\\u4EBA\\u7684\\u4EA4\\u4E92\\u6570\\u636E\\u7B49\\u7B49\\u3002\\u8FD9\\u4E9B\\u90FD\\u80FD\\u591F\\u88AB\\u5B58\\u50A8\\u5728\\u4E2A\\u4EBA\\u670D\\u52A1\\u5668\\u4E2D\\uFF0C\\u4F5C\\u4E3A\\u7B97\\u6CD5\\u8F93\\u5165\\u53C2\\u4E0E\\u5404\\u79CD\\u8BA1\\u7B97\\u670D\\u52A1\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8FD9\\u4E9B\\u6570\\u636E\\u88AB\\u6807\\u51C6\\u5316\\uFF0C\\u6709\\u66F4\\u591A\\u7684\\u534F\\u8BAE\\u548C\\u89C4\\u8303\\u5B9A\\u4E49\\u8FD9\\u4E9B\\u6570\\u636E\\u7684\\u6536\\u96C6\\u548C\\u5B58\\u50A8\\uFF0C\\u5E76\\u4E14\\u652F\\u6301\\u8FD9\\u4E9B\\u6570\\u636E\\u7684\\u9274\\u6743\\u3001\\u52A0\\u5BC6\\u3001\\u8F93\\u5165\\u8F93\\u51FA\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7528\\u6237\\u7684\\u6388\\u6743\\u66F4\\u4FBF\\u6377\\u5FEB\\u901F\\uFF0C\\u7528\\u6237\\u5728\\u5C06\\u81EA\\u5DF1\\u7684\\u4E2A\\u4EBA\\u6570\\u636E\\u63D0\\u4F9B\\u5230\\u5916\\u90E8\\u8BA1\\u7B97\\u670D\\u52A1\\u65F6\\uFF0C\\u53EF\\u4EE5\\u968F\\u5FC3\\u6240\\u6B32\\u7684\\u63A7\\u5236\\u6388\\u6743\\u8303\\u56F4\\u548C\\u5185\\u5BB9\\u7C92\\u5EA6\\uFF0C\\u8FD9\\u4E2A\\u5728\\u4E2A\\u4EBA\\u4FE1\\u606F\\u6570\\u636E\\u5316\\u7684\\u65F6\\u5019\\u5C31\\u8003\\u8651\\u5230\\u7684\\u901A\\u7528\\u6027\\u3002\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u7AEF\\u7684\\u90E8\\u5206\\u65E0\\u9650\\u60F3\\u8C61\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u53EF\\u80FD\\u5DF2\\u7ECF\\u6446\\u8131\\u4E86PC\\u548C\\u624B\\u673A\\u8FD9\\u79CD\\u8F93\\u5165\\u8F93\\u51FA\\u8BBE\\u5907\\uFF0C\\u76F4\\u63A5\\u667A\\u80FD\\u773C\\u955C\\u751A\\u81F3\\u4E8E\\u89C6\\u7F51\\u819C\\u5D4C\\u5165\\uFF0C\\u4E43\\u81F3\\u4E8E\\u8111\\u673A\\u63A5\\u53E3\\u5728\\u8FD9\\u4E2A\\u9636\\u6BB5\\u90FD\\u6709\\u5F88\\u5927\\u7684\\u7814\\u53D1\\u9A71\\u52A8\\u529B\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E2A\\u4EBA\\u4FE1\\u606F\\u7684\\u83B7\\u53D6\\u53EF\\u80FD\\u4E0D\\u90A3\\u4E48\\u4F9D\\u8D56\\u4E8E\\u4E2A\\u4EBA\\u5668\\u5B98\\u4E86\\uFF0C\\u76F4\\u63A5\\u4ECE\\u89C6\\u7F51\\u819C\\u6216\\u8005\\u8111\\u673A\\u90E8\\u5206\\u4ECB\\u5165\\u4F60\\u63A5\\u6536\\u5230\\u7684\\u4FE1\\u606F\\uFF0C\\u770B\\u5230\\u7684\\u6574\\u4E2A\\u4E16\\u754C\\u53EF\\u4EE5\\u88AB\\u7F8E\\u989C\\uFF0C\\u62C9\\u9ED1\\u7684\\u5176\\u4ED6\\u4EBA\\u53EF\\u4EE5\\u76F4\\u63A5\\u4ECE\\u89C6\\u89C9\\u4E0A\\u88AB\\u5C4F\\u853D\\uFF0C\\u80FD\\u591F\\u5728\\u5608\\u6742\\u7684\\u73AF\\u5883\\u4E2D\\u542C\\u5230\\u5F88\\u8FDC\\u7684\\u58F0\\u97F3\\uFF0C\\u80FD\\u591F\\u81EA\\u52A8\\u653E\\u5927\\u8FDC\\u5904\\u7684\\u4E1C\\u897F\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6905\\u5B50\\u63A5\\u5165\\u667A\\u80FD\\u53EF\\u4EE5\\u6839\\u636E\\u8EAB\\u4F53\\u72B6\\u51B5\\u3001\\u808C\\u8089\\u72B6\\u6001\\u548C\\u5DE5\\u4F5C\\u4FE1\\u606F\\u81EA\\u52A8\\u8C03\\u6574\\u59FF\\u52BF\\u3002\\u6C34\\u676F\\u53EF\\u4EE5\\u6839\\u636E\\u81EA\\u5DF1\\u7684\\u559C\\u597D\\u548C\\u73AF\\u5883\\u6E29\\u5EA6\\u81EA\\u52A8\\u8C03\\u6574\\u6C34\\u6E29\\u3002\\u97F3\\u4E50\\u5DF2\\u7ECF\\u53EF\\u4EE5\\u6839\\u636E\\u81EA\\u5DF1\\u7684\\u5FC3\\u60C5\\u548C\\u5DE5\\u4F5C\\u72B6\\u6001\\u81EA\\u52A8\\u751F\\u6210\\u4E86\\u3002\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u6CA1\\u6709\\u4E86\\u4E0D\\u517C\\u5BB9\\u4E00\\u8BF4\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5F88\\u591A\\u516C\\u53F8\\u4E3A\\u4E86\\u80FD\\u591F\\u63D0\\u4F9B\\u6807\\u51C6\\u5316\\u7684\\u670D\\u52A1\\uFF0C\\u4F1A\\u5F00\\u53D1\\u66F4\\u52A0\\u7B26\\u5408\\u672A\\u6765\\u901A\\u7528\\u7684\\u751F\\u6D3B\\u534F\\u8BAE\\u3002\\u6BD4\\u5982\\u89C6\\u89C9\\u670D\\u52A1\\u5C31\\u50CF\\u73B0\\u5728\\u7684HDMI\\u63A5\\u53E3\\u4E00\\u6837\\uFF0C\\u4E3B\\u673A\\u548C\\u663E\\u793A\\u5668\\u90FD\\u53EF\\u4EE5\\u968F\\u4FBF\\u5347\\u7EA7\\uFF0C\\u786C\\u4EF6\\u8BBE\\u5907\\u7684\\u901A\\u7528\\u6027\\u548C\\u53EF\\u66FF\\u6362\\u6027\\u66F4\\u5F3A\\u4E86\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5C31\\u7B97\\u6709\\u4E0D\\u517C\\u5BB9\\u7684\\u63A5\\u53E3\\uFF0C\\u4E5F\\u53EF\\u4EE5\\u901A\\u8FC7\\u667A\\u80FD\\u8F6C\\u6362\\u6765\\u8FDB\\u884C\\u53C2\\u6570\\u8C03\\u6574\\uFF0C\\u6240\\u4EE5\\u5404\\u4E2A\\u4EBA\\u5DE5\\u667A\\u80FD\\u8F6F\\u4EF6\\u670D\\u52A1\\u548C\\u786C\\u4EF6\\u8BBE\\u5907\\u90FD\\u53EF\\u4EE5\\u901A\\u8FC7\\u5404\\u79CD\\u81EA\\u52A8\\u534F\\u8BAE\\u53D1\\u73B0\\u548C\\u8F6C\\u6362\\u903B\\u8F91\\u8FDB\\u884C\\u517C\\u5BB9\\u3002\\uFF08\\u73B0\\u5728\\u5DF2\\u7ECF\\u6709\\u516C\\u53F8\\u5728\\u63A2\\u7D22\\u5927\\u6570\\u636E\\u6A21\\u578B\\u4F7F\\u7528AI\\u8F93\\u51FA\\u786C\\u4EF6\\u8BBE\\u5907\\u63A7\\u5236\\u4FE1\\u53F7\\u4E86\\uFF09\\u6BD4\\u5982\\u667A\\u80FD\\u626B\\u5730\\u673A\\u7684\\u786C\\u4EF6\\u5C31\\u7B97\\u662F\\u79C1\\u6709\\u534F\\u8BAE\\uFF0C\\u4E5F\\u53EF\\u4EE5\\u901A\\u8FC7\\u4EBA\\u5DE5\\u667A\\u80FD\\u8FDB\\u884C\\u534F\\u8BAE\\u8F6C\\u6362\\uFF0C\\u80FD\\u591F\\u5F3A\\u884C\\u5C06\\u67D0\\u4E2A\\u79C1\\u6709\\u534F\\u8BAE\\u7684\\u907F\\u969C\\u7CFB\\u7EDF\\u3001\\u884C\\u8D70\\u7CFB\\u7EDF\\u3001\\u6E05\\u626B\\u7CFB\\u7EDF\\u7B49\\u786C\\u4EF6\\u534F\\u8BAE\\uFF0C\\u901A\\u8FC7\\u4E00\\u4E2A\\u9002\\u914D\\u7B97\\u6CD5\\uFF0C\\u5D4C\\u5957\\u4E0A\\u53E6\\u4E00\\u4E2A\\u516C\\u53F8\\u66F4\\u52A0\\u4E2A\\u6027\\u5316\\u7684\\u9AD8\\u7EA7\\u667A\\u80FD\\u626B\\u5730\\u7A0B\\u5E8F\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u56E0\\u4E3A\\u8F6F\\u786C\\u4EF6\\u7684\\u9002\\u914D\\u548C\\u8F6C\\u6362\\u4EE3\\u4EF7\\u5C0F\\u4E86\\uFF0C\\u6240\\u4EE5\\u4E00\\u5B9A\\u7A0B\\u5EA6\\u4E0A\\u901A\\u7528\\u6027\\u66F4\\u9AD8\\u4E86\\u3002\")), mdx(\"p\", null, \"\\u4EE5\\u4E0A\\u90A3\\u4E48\\u591A\\u8BBE\\u5B9A\\u90FD\\u662F\\u5728\\u8BB2\\u672A\\u6765\\u534F\\u8BAE\\u7684\\u901A\\u7528\\u6027\\uFF0C\\u6570\\u636E\\u7684\\u6D41\\u8F6C\\u548C\\u8F93\\u5165\\u8F93\\u51FA\\u7684\\u63A5\\u5165\\u90FD\\u66F4\\u53EF\\u884C\\u3002\"), mdx(\"h3\", null, \"2.2 \\u672A\\u6765\\u7684\\u751F\\u6001\"), mdx(\"h4\", null, \"\\u7528\\u6237\\u4E2A\\u4EBA\\u4FE1\\u606F\\u670D\\u52A1\\u516C\\u53F8\"), mdx(\"p\", null, \"\\u8D1F\\u8D23\\u91C7\\u96C6\\u548C\\u7BA1\\u7406\\u7528\\u6237\\u7684\\u4E2A\\u4EBA\\u4FE1\\u606F\\uFF0C\\u8BA9\\u7528\\u6237\\u81EA\\u5DF1\\u80FD\\u591F\\u67E5\\u770B\\u3001\\u7BA1\\u7406\\u548C\\u4F7F\\u7528\\u81EA\\u5DF1\\u7684\\u79C1\\u4EBA\\u6570\\u636E\\uFF0C\\u53EF\\u4EE5\\u770B\\u4F5C\\u4E2A\\u4EBA\\u5168\\u91CF\\u5F55\\u5236\\u670D\\u52A1\\uFF0C\\u6216\\u8005\\u6570\\u5B57\\u5B6A\\u751F\\u540C\\u6B65\\u5DE5\\u5177\\uFF0C\\u4E0D\\u8FC7\\u5BE1\\u5934\\u5927\\u516C\\u53F8\\u53EF\\u4E0D\\u613F\\u610F\\u8BA9\\u8FD9\\u79CD\\u6570\\u636E\\u767D\\u767D\\u6D41\\u5931\\uFF0C\\u6240\\u4EE5\\u80AF\\u5B9A\\u4F1A\\u5728\\u5404\\u79CD\\u5C42\\u9762\\u6536\\u96C6\\u4F60\\u7684\\u559C\\u597D\\u3001\\u804A\\u5929\\u3001\\u5DE5\\u4F5C\\u8DEF\\u5F84\\u7B49\\u4FE1\\u606F\\uFF0C\\u7136\\u540E\\u901A\\u8FC7\\u5927\\u6570\\u636E\\u5206\\u6790\\uFF0C\\u6BD4\\u4F60\\u81EA\\u5DF1\\u66F4\\u4E86\\u89E3\\u4F60\\u81EA\\u5DF1\\u3002\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63D0\\u4F9B\\u6807\\u51C6\\u5316\\u7684\\u786C\\u4EF6\\u8BBE\\u5907\\uFF1A\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6807\\u51C6\\u8F93\\u5165\\u8F93\\u51FA\\u8BBE\\u5907\\uFF1A\\u89C6\\u7F51\\u819C\\u5C4F\\u5E55\\u3001\\u5D4C\\u5165\\u5F0F\\u8033\\u673A\\u3001\\u5473\\u89C9\\u55C5\\u89C9\\u63A7\\u5236\\u5668\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4FE1\\u606F\\u91C7\\u96C6\\u8BBE\\u5907\\uFF1A\\u5168\\u8EAB\\u6444\\u50CF\\u5934\\u548C\\u9EA6\\u514B\\u98CE\\u3001\\u73AF\\u5883\\u4F20\\u611F\\u5668\\u3001\\u5D4C\\u5165\\u5F0F\\u8EAB\\u4F53\\u6307\\u6807\\u4F20\\u611F\\u5668\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6570\\u636E\\u91C7\\u96C6\\u8BBE\\u5907\\u6216\\u670D\\u52A1\\uFF1A\\u90AE\\u7BB1\\u3001\\u793E\\u4EA4\\u8F6F\\u4EF6\\u3001\\u5373\\u65F6\\u901A\\u8BAF\\u3001\\u5DE5\\u4F5C\\u8BB0\\u5F55\\u7B49\\u7B49\\u8BB0\\u5F55\\u8F6F\\u4EF6\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6301\\u7EED\\u6216\\u8005\\u5468\\u671F\\u6027\\u7684\\u4E0A\\u62A5\\u5230\\u79C1\\u4EBA\\u670D\\u52A1\\u5668\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63D0\\u4F9B\\u6570\\u636E\\u5B58\\u50A8\\u670D\\u52A1\\uFF1A\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E2A\\u4EBA\\u4FE1\\u606F\\u7684\\u6D41\\u5F0F\\u4F20\\u8F93\\u548C\\u6C38\\u4E45\\u5B58\\u50A8\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u591A\\u7AEF\\u81EA\\u52A8\\u517C\\u5BB9\\u7684\\u6570\\u636E\\u5B58\\u53D6\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E25\\u683C\\u7684\\u6570\\u636E\\u52A0\\u5BC6\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u63D0\\u4F9B\\u6570\\u636E\\u6388\\u6743\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7528\\u6237\\u53EF\\u4EE5\\u6388\\u6743\\u54EA\\u4E9B\\u6570\\u636E\\u53EF\\u4EE5\\u88AB\\u54EA\\u4E9B\\u5916\\u90E8\\u8BBF\\u95EE\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7528\\u6237\\u53EF\\u4EE5\\u6388\\u6743\\u54EA\\u4E9B\\u4E2A\\u4EBA\\u8BBE\\u5907\\u53EF\\u4EE5\\u88AB\\u5916\\u90E8\\u8F93\\u51FA\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E25\\u683C\\u7684\\u6570\\u636E\\u5B58\\u53D6\\u65E5\\u5FD7\\u670D\\u52A1\")), mdx(\"h4\", null, \"\\u672A\\u6765\\u793E\\u4EA4\\u516C\\u53F8\"), mdx(\"p\", null, \"\\u7528\\u6237\\u6388\\u6743\\u6570\\u636E\\u91C7\\u96C6\\u548C\\u8BBE\\u5907\\u4EA4\\u4E92\\u80FD\\u529B\\uFF0C\\u5C06\\u672A\\u6765\\u6700\\u57FA\\u672C\\u7684\\u793E\\u4EA4\\u5B9E\\u73B0\\u4E3A\\u5168\\u91CF\\u6570\\u5B57\\u5316\\u7684\\u670D\\u52A1\\u3002\"), mdx(\"p\", null, \"\\u672A\\u6765\\u7684\\u793E\\u4EA4\\u5C06\\u7A81\\u7834\\u65F6\\u7A7A\\u9650\\u5236\\uFF0C\\u5B9E\\u73B0\\u771F\\u6B63\\u610F\\u4E49\\u4E0A\\u7684\\\"\\u5728\\u573A\\\"\\u3002\\u901A\\u8FC7\\u5168\\u606F\\u6295\\u5F71\\u6216\\u773C\\u955C\\u89C6\\u89C9\\u7684\\u6C89\\u6D78\\u5F0F\\u4F53\\u9A8C\\uFF0C\\u5373\\u4F7F\\u76F8\\u9694\\u4E07\\u91CC\\u4E5F\\u80FD\\u611F\\u53D7\\u5230\\u5BF9\\u65B9\\u7684\\u771F\\u5B9E\\u5B58\\u5728\\u3002\\u4F46\\u66F4\\u91CD\\u8981\\u7684\\u662F\\uFF0C\\u6280\\u672F\\u5E94\\u8BE5\\u589E\\u5F3A\\u800C\\u975E\\u66FF\\u4EE3\\u771F\\u5B9E\\u7684\\u60C5\\u611F\\u8FDE\\u63A5\\u3002\\u793E\\u4EA4\\u7684\\u6838\\u5FC3\\u662F\\u4EBA\\u4E0E\\u4EBA\\u4E4B\\u95F4\\u7684\\u60C5\\u611F\\u4EA4\\u6D41\\uFF0C\\u800C\\u975E\\u4FE1\\u606F\\u7684\\u7B80\\u5355\\u4F20\\u9012\\u3002\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u5929\\u548C\\u54EA\\u4E9B\\u4EBA\\u89C1\\u9762\\uFF0C\\u8BF4\\u7684\\u54EA\\u4E9B\\u8BDD\\uFF0C\\u8C08\\u8BBA\\u7684\\u5177\\u4F53\\u4E8B\\u60C5\\u90FD\\u4F1A\\u88AB\\u5F55\\u5236\\u5E76\\u88AB\\u5206\\u6790\\uFF0C\\u7136\\u540E\\u8F93\\u51FA\\u7ED3\\u6784\\u5316\\u6570\\u636E\\u4EE5\\u4F9B\\u5F52\\u6863\\u67E5\\u8BE2\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E2A\\u4EBA\\u901A\\u8BAF\\u5F55\\u7684\\u4F7F\\u7528\\u66F4\\u52A0\\u4FBF\\u6377\\uFF0C\\u76F4\\u63A5\\u901A\\u8FC7\\u89C6\\u7F51\\u819C\\u5C4F\\u5E55\\u548C\\u5168\\u8EAB\\u6444\\u50CF\\u5934\\u548C\\u9EA6\\u514B\\u98CE\\u8FDB\\u884C\\u5B9E\\u666F\\u901A\\u8BDD\\uFF0C\\u7FA4\\u7EC4\\u4F1A\\u8BAE\\u5BA4\\u53EF\\u4EE5\\u66F4\\u52A0\\u8EAB\\u4E34\\u5176\\u5883\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u793E\\u4EA4\\u4FE1\\u606F\\u88AB\\u81EA\\u52A8\\u5F52\\u6863\\u5E76\\u52A0\\u5165\\u4E2A\\u4EBA\\u8BA1\\u5212\\uFF0C\\u6BD4\\u5982\\u5468\\u672B\\u91C7\\u8D2D\\u8BA1\\u5212\\u4F1A\\u81EA\\u52A8\\u8C03\\u7528\\u5206\\u6790\\u4E00\\u5468\\u5185\\u548C\\u5BB6\\u4EBA\\u804A\\u5929\\u4FE1\\u606F\\u4E2D\\u7684\\u91C7\\u8D2D\\u4FE1\\u606F\\uFF0C\\u5F97\\u51FA\\u9700\\u8981\\u91C7\\u4E70\\u4EC0\\u4E48\\u4E2A\\u6027\\u5316\\u7684\\u4E1C\\u897F\\u3002\\u6BD4\\u5982\\u548C\\u597D\\u53CB\\u7684\\u51FA\\u884C\\u8BA1\\u5212\\u4F1A\\u5728\\u4E00\\u9635\\u8BA8\\u8BBA\\u540E\\u81EA\\u52A8\\u6574\\u7406\\u51FA\\u7CBE\\u786E\\u5230\\u5C0F\\u65F6\\u7684\\u65C5\\u6E38\\u89C4\\u5212\\u5E76\\u540C\\u6B65\\u7ED9\\u6BCF\\u4E2A\\u4EBA\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E2A\\u4EBA\\u60F3\\u8981\\u5206\\u4EAB\\u7684\\u5FC3\\u60C5\\u548C\\u56FE\\u7247\\u4F1A\\u81EA\\u52A8\\u6574\\u7406\\u5185\\u5BB9\\uFF0C\\u751F\\u6210\\u4FE1\\u606F\\u6D41\\u540C\\u6B65\\u7ED9\\u81EA\\u5DF1\\u7684\\u597D\\u53CB\\u5708\\u5B50\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u597D\\u53CB\\u5708\\u7684\\u793E\\u4EA4\\u4FE1\\u606F\\u6D41\\u53EF\\u4EE5\\u6BCF\\u65E5\\u81EA\\u52A8\\u5206\\u6790\\u5E76\\u6309\\u4EBA\\u6574\\u7406\\u51FA\\u9700\\u8981\\u540C\\u6B65\\u77E5\\u6653\\u7684\\u6709\\u6548\\u4FE1\\u606F\")), mdx(\"h4\", null, \"\\u672A\\u6765\\u751F\\u6D3B\\u52A9\\u624B\\u516C\\u53F8\"), mdx(\"p\", null, \"\\u7528\\u6237\\u6388\\u6743\\u4E2A\\u4EBA\\u4FE1\\u606F\\uFF0C\\u901A\\u8FC7\\u7B97\\u529B\\u548C\\u667A\\u80FD\\u7B97\\u6CD5\\u4ECB\\u5165\\u5230\\u81EA\\u5DF1\\u7684\\u751F\\u6D3B\\u7BA1\\u7406\\u4E2D\\uFF0C\\u63D0\\u4F9B\\u771F\\u4E2A\\u6027\\u5316\\u670D\\u52A1\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u7528\\u6237\\u6388\\u6743\\u4E2A\\u4EBA\\u6570\\u636E\\uFF1A\\u8EAB\\u4F53\\u6570\\u636E\\u3001\\u793E\\u4EA4\\u6570\\u636E\\u3001\\u5404\\u79CD\\u4F20\\u611F\\u5668\\u6570\\u636E\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u66F4\\u52A0\\u667A\\u80FD\\u5316\\u7684\\u751F\\u6D3B\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u667A\\u80FD\\u5BB6\\u5C45\\uFF1A\\u80FD\\u591F\\u6839\\u636E\\u8EAB\\u4F53\\u72B6\\u51B5\\u3001\\u73AF\\u5883\\u6570\\u636E\\u3001\\u4E2A\\u4EBA\\u559C\\u597D\\uFF0C\\u667A\\u80FD\\u8C03\\u6574\\u6BCF\\u4E2A\\u623F\\u95F4\\u6E29\\u6E7F\\u5EA6\\u3001\\u706F\\u5149\\u3001\\u5750\\u59FF\\u3001\\u6D74\\u5BA4\\u6C34\\u6E29\\u7B49\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u751F\\u6D3B\\u670D\\u52A1\\uFF1A\\u8EAB\\u4F53\\u6307\\u6807\\u6C47\\u603B\\u548C\\u5065\\u5EB7\\u5EFA\\u8BAE\\u3001\\u6BCF\\u65E5\\u4E2A\\u6027\\u5316\\u98DF\\u8C31\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8F85\\u52A9\\u751F\\u6D3B\\u670D\\u52A1\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60F3\\u8981\\u505A\\u996D\\uFF0C\\u670D\\u52A1\\u4F1A\\u6839\\u636E\\u51B0\\u7BB1\\u7684\\u83DC\\u548C\\u5065\\u5EB7\\u63A8\\u8350\\u81EA\\u52A8\\u751F\\u6210\\u83DC\\u8C31\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u60F3\\u8981\\u65C5\\u884C\\uFF0C\\u670D\\u52A1\\u4F1A\\u6839\\u636E\\u5047\\u671F\\u548C\\u9884\\u7B97\\u81EA\\u52A8\\u751F\\u6210\\u65C5\\u884C\\u8BA1\\u5212\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5468\\u672B\\u4E0D\\u77E5\\u9053\\u600E\\u4E48\\u8FC7\\uFF0C\\u670D\\u52A1\\u4F1A\\u81EA\\u52A8\\u5206\\u6790\\u9644\\u8FD1\\u7684\\u516C\\u56ED\\u3001\\u56FE\\u4E66\\u9986\\u7B49\\uFF0C\\u5206\\u6790\\u4EBA\\u6D41\\u91CF\\u540E\\u81EA\\u52A8\\u63A8\\u8350\\u76EE\\u7684\\u5730\\u3001\\u51FA\\u884C\\u65F6\\u95F4\\u548C\\u65B9\\u5F0F\")), mdx(\"h4\", null, \"\\u672A\\u6765OA\\u670D\\u52A1\\u516C\\u53F8\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u8BB0\\u5F55\\u6574\\u4E2A\\u516C\\u53F8\\u6240\\u6709\\u53C2\\u4E0E\\u8005\\u7684\\u5DE5\\u4F5C\\u5185\\u5BB9\\u548C\\u5DE5\\u4F5C\\u8FDB\\u5EA6\\uFF0C\\u7136\\u540E\\u6839\\u636E\\u6570\\u636E\\u8FDB\\u884C\\u81EA\\u52A8\\u5316\\u8C03\\u5EA6\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6BCF\\u4E00\\u573A\\u4F1A\\u8BAE\\u90FD\\u4F1A\\u4E8B\\u65E0\\u5DE8\\u7EC6\\u7684\\u6839\\u636E\\u5185\\u5BB9\\u751F\\u6210\\u53EF\\u6267\\u884C\\u7684\\u4EFB\\u52A1\\u5206\\u914D\\u548C\\u6392\\u671F\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5DE5\\u4F5C\\u5185\\u5BB9\\u7684\\u6D41\\u8F6C\\u548C\\u4EFB\\u52A1\\u7684\\u81EA\\u52A8\\u5206\\u914D\\u673A\\u5236\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u6839\\u636E\\u8FD9\\u4E9B\\u5E9E\\u5927\\u7684\\u516C\\u53F8\\u8FD0\\u8F6C\\u6570\\u636E\\uFF0C\\u53EF\\u4EE5\\u667A\\u80FD\\u7684\\u5173\\u8054\\u516C\\u53F8\\u5229\\u6DA6\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u751A\\u81F3\\u4F60\\u505A\\u7684\\u6BCF\\u4E2A\\u51B3\\u5B9A\\u90FD\\u53EF\\u80FD\\u88AB\\u91C7\\u96C6\\uFF0C\\u7136\\u540E\\u8BAD\\u7EC3\\u51FA\\u80FD\\u591F\\u66FF\\u4EE3\\u4F60\\u51B3\\u7B56\\u7684\\u4E00\\u4E2A\\u865A\\u62DF\\u4EBA\")), mdx(\"h4\", null, \"\\u672A\\u6765\\u793E\\u4F1A\\u7B97\\u6CD5\\u516C\\u53F8\"), mdx(\"p\", null, \"\\u901A\\u8FC7\\u91C7\\u96C6\\u66F4\\u52A0\\u4E30\\u5BCC\\u516C\\u5F00\\u6570\\u636E\\uFF0C\\u901A\\u8FC7\\u793E\\u4F1A\\u7B97\\u6CD5\\u5927\\u8303\\u56F4\\u7684\\u6316\\u6398\\u6570\\u636E\\uFF0C\\u5F97\\u51FA\\u793E\\u4F1A\\u91D1\\u878D\\u8D8B\\u52BF\\u9884\\u6D4B\\u7684\\u76EE\\u7684\\uFF0C\\u751A\\u81F3\\u653F\\u6CBB\\u548C\\u519B\\u4E8B\\u53D1\\u5C55\\u9884\\u6D4B\\u3002\"), mdx(\"h3\", null, \"2.3 \\u672A\\u6765\\u534F\\u8BAE\\u7684\\u5B9E\\u73B0\"), mdx(\"p\", null, \"\\u4E0A\\u9762\\u90A3\\u4E48\\u591A\\u672A\\u6765\\u573A\\u666F\\uFF0C\\u5305\\u542B\\u4E86\\u5404\\u79CD\\u7A7A\\u4E2D\\u697C\\u9601\\uFF0C\\u90FD\\u662F\\u5047\\u8BBE\\u5E95\\u5C42\\u5DF2\\u7ECF\\u81EA\\u7531\\u7684\\u8DD1\\u901A\\u4E86\\u6280\\u672F\\u95EE\\u9898\\uFF0C\\u90A3\\u4E48\\u6700\\u57FA\\u7840\\u7684\\u6280\\u672F\\u95EE\\u9898\\u5C31\\u662F\\u8FD9\\u4E9B\\u672A\\u6765\\u534F\\u8BAE\\u7684\\u5B9A\\u4E49\\u548C\\u89C4\\u5219\\u3002\"), mdx(\"p\", null, \"\\u4ECE\\u6700\\u57FA\\u672C\\u7684\\u7F51\\u7EDC\\u4E92\\u8054\\u601D\\u60F3\\u63A8\\u5BFC\\uFF0C\\u672A\\u6765\\u534F\\u8BAE\\u7684\\u5B9E\\u73B0\\u524D\\u63D0\\u662F\\u5B58\\u50A8\\u3001\\u4F20\\u8F93\\u548C\\u7B97\\u529B\\u7684\\u8D85\\u4F4E\\u6210\\u672C\\u5316\\uFF0C\\u5BF9\\u4E00\\u4E2A\\u6DF7\\u6C8C\\u5927\\u6A21\\u578B\\u6301\\u7EED\\u7684\\u8F93\\u5165\\u4E0D\\u540C\\u7C7B\\u578B\\u7684\\u6570\\u636E\\uFF0C\\u8BA9\\u5B83\\u8F93\\u51FA\\u5404\\u79CD\\u51B3\\u7B56\\u548C\\u5185\\u5BB9\\u3002\"), mdx(\"h4\", null, \"\\u4E07\\u7269\\u53EF\\u4EA4\\u4E92\"), mdx(\"p\", null, \"\\u6BCF\\u4E2A\\u4EBA\\u3001\\u6BCF\\u4E2A\\u8BBE\\u5907\\u90FD\\u662F\\u53EF\\u4EE5\\u4EA4\\u4E92\\u7684\\uFF0C\\u80FD\\u591F\\u8FDE\\u63A5\\u3001\\u8F93\\u5165\\u3001\\u8F93\\u51FA\\u3002\\u4ECE\\u5E95\\u5C42\\u5230\\u4E0A\\u5C42\\u7684\\u5404\\u79CD\\u534F\\u8BAE\\u6765\\u5B9E\\u73B0\\u4ECE\\u57FA\\u672C\\u7684\\u5B58\\u50A8\\u5230\\u63D0\\u4F9B\\u5916\\u90E8\\u670D\\u52A1\\u3002\"), mdx(\"p\", null, \"\\u5F53\\u7136\\u8FD9\\u4E9B\\u8BBE\\u5907\\u7684\\u4EA4\\u4E92\\u63A7\\u5236\\u548C\\u73B0\\u5728\\u670D\\u52A1\\u5668\\u7684\\u5F88\\u591A\\u65B9\\u6848\\u90FD\\u7C7B\\u4F3C\\uFF0C\\u9700\\u8981\\u9632\\u706B\\u5899\\u3001\\u9274\\u6743\\u3001\\u7AEF\\u53E3\\u7BA1\\u7406\\u3001\\u5B89\\u5168\\u7EC4\\u4E4B\\u7C7B\\u7684\\u6982\\u5FF5\\u6765\\u7BA1\\u63A7\\u8FDE\\u63A5\\u548C\\u4EA4\\u4E92\\u3002\"), mdx(\"h4\", null, \"\\u4E07\\u7269\\u53EF\\u4E92\\u8054\"), mdx(\"p\", null, \"\\u4EBA\\u6216\\u8BBE\\u5907\\u53EF\\u4EE5\\u901A\\u8FC7\\u5404\\u79CD\\u7269\\u7406\\u94FE\\u63A5\\uFF08\\u6709\\u7EBF\\u65E0\\u7EBF\\u3001\\u5C40\\u57DF\\u7F51\\u5E7F\\u57DF\\u7F51\\uFF09\\u4E92\\u901A\\uFF0C\\u7136\\u540E\\u901A\\u8FC7\\u57FA\\u7840\\u534F\\u8BAE\\u5EFA\\u7ACB connection\\u3002\"), mdx(\"p\", null, \"\\u4EFB\\u4F55\\u8BBE\\u5907\\u5728\\u5F00\\u673A\\u540E\\u80FD\\u591F\\u81EA\\u52A8\\u7684\\u8FDE\\u63A5\\u7F51\\u7EDC\\uFF0C\\u5BFB\\u627E\\u7F51\\u5173\\uFF0C\\u6CE8\\u518C\\u8BBE\\u5907\\uFF0C\\u67E5\\u8BE2\\u534F\\u8BAE\\uFF0C\\u63A5\\u53D7\\u8C03\\u5EA6\\uFF0C\\u5BF9\\u63A5\\u8BBE\\u5907\\u8F93\\u5165\\u8F93\\u51FA\\u7B49\\u3002\"), mdx(\"h4\", null, \"\\u4E07\\u7269\\u53EF\\u64CD\\u4F5C\"), mdx(\"p\", null, \"\\u4E92\\u8054\\u4E92\\u901A\\u4E4B\\u540E\\uFF0C\\u6BCF\\u4E2A\\u8BBE\\u5907\\u7684\\u64CD\\u4F5C\\u7CFB\\u7EDF\\u548C\\u76F8\\u5173\\u534F\\u8BAE\\u90FD\\u4F1A\\u63A5\\u53D7\\u8C03\\u5EA6\\u88AB\\u64CD\\u4F5C\\u3002\"), mdx(\"p\", null, \"\\u64CD\\u4F5C\\u7CFB\\u7EDF\\u63A5\\u53D7\\u5404\\u79CD\\u63A7\\u5236\\u4FE1\\u606F\\uFF0C\\u5C06\\u63A7\\u5236\\u4FE1\\u606F\\u8F93\\u51FA\\u4E3A\\u8BBE\\u5907\\u7684\\u6267\\u884C\\u547D\\u4EE4\\uFF0C\\u5BF9\\u4E8E\\u663E\\u793A\\u5668\\u662F\\u663E\\u793A\\u5185\\u5BB9\\uFF0C\\u5BF9\\u4E8E\\u673A\\u5668\\u4EBA\\u662F\\u884C\\u8D70\\u62FF\\u53D6\\uFF0C\\u5BF9\\u4E8E\\u626B\\u5730\\u673A\\u662F\\u907F\\u969C\\u626B\\u62D6\\u3002\\u5E95\\u5C42\\u7684\\u6267\\u884C\\u662F\\u6BCF\\u4E00\\u4E2A\\u51CF\\u901F\\u5668\\u3001\\u6BCF\\u4E00\\u4E2A\\u6B65\\u8FDB\\u7535\\u673A\\u3001\\u6BCF\\u4E00\\u4E2ALED\\u706F\\u73E0\\uFF0C\\u8FD9\\u4E9B\\u53EF\\u6267\\u884C\\u7684\\u7EC8\\u7AEF\\u662F\\u64CD\\u4F5C\\u7CFB\\u7EDF\\u7684\\u6267\\u884C\\u610F\\u4E49\\u3002\"), mdx(\"h4\", null, \"\\u534F\\u8BAE\\u7684\\u610F\\u4E49\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u5E95\\u5C42\\u534F\\u8BAE\\uFF1A\\u5728\\u8F93\\u5165\\u8F93\\u51FA\\u4E0A\\u9762\\u4F20\\u8F93\\u6807\\u51C6\\u7684\\u7EA6\\u5B9A\\u534F\\u8BAE\\uFF0C\\u6BD4\\u5982\\u4E00\\u4E2A\\u8FDE\\u7EEDN\\u5404\\u9AD8\\u7535\\u5E731\\u548CM\\u4E2A\\u4F4E\\u7535\\u5E730\\u4FE1\\u53F7\\u4EE3\\u88680xffffffff\\u5B57\\u8282\\u4FE1\\u606F\\uFF0C\\u4E00\\u6BB5\\u5B57\\u8282\\u4FE1\\u606F\\u8868\\u793AABC\\u5B57\\u6BCD\\uFF0C\\u4E00\\u6BB5ABC\\u5B57\\u7B26\\u4E32\\u8868\\u793A\\u4E00\\u4E2ARUN\\u547D\\u4EE4\\uFF0C\\u4E00\\u6BB5RUN\\u547D\\u4EE4\\u8868\\u793A\\u4EC0\\u4E48\\u542B\\u4E49\\u643A\\u5E26\\u4EC0\\u4E48\\u6570\\u636E\\uFF0C\\u8FD9\\u662F\\u534F\\u8BAE\\u7684\\u5E95\\u5C42\\u7EC4\\u6210\\u3002\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u4E0A\\u5C42\\u534F\\u8BAE\\uFF1A\\u5728\\u5E95\\u5C42\\u534F\\u8BAE\\u4E0A\\u6784\\u5EFA\\u66F4\\u9AD8\\u7EA7\\u7684\\u534F\\u8BAE\\uFF0C\\u6BD4\\u5982\\u4E00\\u4E2A\\u4EC0\\u4E48\\u547D\\u4EE4\\u52A0\\u4EC0\\u4E48\\u6570\\u636E\\u8868\\u793A\\u8FD9\\u4E2A\\u8BBE\\u5907\\u80FD\\u591F\\u63A5\\u53D7\\u591A\\u5927\\u7684\\u5145\\u7535\\u529F\\u7387\\u591A\\u5927\\u7684\\u7535\\u538B\\u548C\\u7535\\u6D41\\u7B49\\u7B49\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"\\u9876\\u5C42\\u534F\\u8BAE\\uFF1A\\u5728\\u4E1A\\u52A1\\u5C42\\u9762\\uFF0C\\u672A\\u6765\\u534F\\u8BAE\\u53EF\\u80FD\\u4F1A\\u7CBE\\u786E\\u5230\\u4E2A\\u4EBA\\u884C\\u7A0B\\u548C\\u65E5\\u7A0B\\u8868\\u7684\\u6807\\u51C6\\u534F\\u8BAE\\uFF0C\\u8BA9\\u6BCF\\u4E2A\\u4EBA\\u7684\\u6570\\u636E\\u90FD\\u80FD\\u591F\\u88AB\\u89E3\\u8BFB\\u4E3A\\u6709\\u610F\\u4E49\\u7684\\u4FE1\\u606F\\u3002\")), mdx(\"p\", null, \"\\u8FD9\\u4E2A\\u65F6\\u5019\\u6BCF\\u4E2A\\u4EBA\\u50CF\\u662F\\u5145\\u7535\\u7684\\u901A\\u4FE1\\u534F\\u8BAE\\u4F3C\\u7684\\uFF0C\\u53CC\\u5411\\u6C9F\\u901A\\uFF0C\\u67E5\\u8BE2\\u652F\\u6301\\u7684\\u534F\\u8BAE\\u6808\\u3002\"), mdx(\"p\", null, \"\\u6BD4\\u5982\\uFF1A\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u57FA\\u7840\\u7684\\u516C\\u5F00\\u534F\\u8BAE\\uFF1A\\u4E2A\\u4EBA\\u884C\\u7A0B\\u548C\\u65E5\\u7A0B\\u8868\\u3001\\u4E2A\\u4EBA\\u7684\\u793E\\u4EA4\\u548C\\u670B\\u53CB\\u5708\\u3001\\u4E2A\\u4EBA\\u7684\\u8054\\u7CFB\\u65B9\\u5F0F\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\u6709\\u521D\\u7EA7\\u9274\\u6743\\u7684\\u4E92\\u52A8\\uFF1A\\u793E\\u4EA4\\u8BC4\\u8BBA\\u70B9\\u8D5E\\u4EA4\\u4E92\\u3001\\u8BED\\u97F3\\u89C6\\u9891\\u7535\\u8BDD\\u3001\\u90AE\\u4EF6\\u77ED\\u4FE1\\u606F\")), mdx(\"p\", null, \"\\u4ECE\\u5E95\\u5C42\\u534F\\u8BAE\\u5230\\u9876\\u5C42\\u534F\\u8BAE\\uFF0C\\u901A\\u8FC7\\u5B58\\u50A8\\u3001\\u4F20\\u8F93\\u548C\\u7B97\\u529B\\u7684\\u52A0\\u6301\\uFF0C\\u8BA9\\u5404\\u79CD\\u8BBE\\u5907\\u80FD\\u591F\\u63A5\\u5165\\u5230\\u672A\\u6765\\u751F\\u6D3B\\u3002\"), mdx(\"p\", null, \"\\u8FD9\\u662F\\u6211\\u7545\\u60F3\\u7684\\u672A\\u6765\\u534F\\u8BAE\\u4E16\\u754C\\u3002\"));\n}\n;\nMDXContent.isMDXComponent = true;"}}}}